From 8461f1da0624f9250531a8c330d9785f8e70f49f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:00:02 +0000 Subject: [PATCH 1/4] Initial plan From da18e648e4b00d1ae30fe3032defadb149f5783f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:06:41 +0000 Subject: [PATCH 2/4] Fix iterator equality to compare only source and index Modified iterator implementation to remove count from equality comparison: - Changed increment operator to not wrap index (now stores unwrapped index) - Updated dereference operators to apply modulo when accessing elements - Modified end() to use tail_ + size_ instead of head_ for unique index - Removed count from operator== and operator!= comparisons This ensures two iterators are equal if they point to the same position in the same container, regardless of iteration count, following standard iterator semantics. Co-authored-by: bugparty <1510776+bugparty@users.noreply.github.com> --- RingBuffer.hpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/RingBuffer.hpp b/RingBuffer.hpp index 23fcc39..3c92324 100644 --- a/RingBuffer.hpp +++ b/RingBuffer.hpp @@ -49,22 +49,22 @@ namespace buffers { ring_buffer_iterator& operator=(ring_buffer_iterator const& ) noexcept = default; template::type* = nullptr> [[nodiscard]] reference operator*() noexcept { - return (*source_)[index_]; + return (*source_)[index_ % N]; } template::type* = nullptr> [[nodiscard]] const_reference operator*() const noexcept { - return (*source_)[index_]; + return (*source_)[index_ % N]; } template::type* = nullptr> [[nodiscard]] pointer operator->() noexcept { - return &((*source_)[index_]); + return &((*source_)[index_ % N]); } template::type* = nullptr> [[nodiscard]] const_pointer operator->() const noexcept { - return &((*source_)[index_]); + return &((*source_)[index_ % N]); } self_type& operator++() noexcept { - index_ = ++index_ % N; + ++index_; ++count_; return *this; } @@ -92,13 +92,13 @@ namespace buffers { template bool operator==(ring_buffer_iterator const& l, ring_buffer_iterator const& r) noexcept { - return l.source() == r.source() && l.count() == r.count() && l.index() == r.index(); + return l.source() == r.source() && l.index() == r.index(); } template bool operator!=(ring_buffer_iterator const& l, ring_buffer_iterator const& r) noexcept { - return l.source() != r.source() || l.count() != r.count() || l.index() != r.index(); + return l.source() != r.source() || l.index() != r.index(); } } @@ -214,11 +214,11 @@ using std::bool_constant; // Iterator to oldest element. [[nodiscard]] iterator begin() noexcept { return iterator{this, tail_, 0};} // Iterator to one past newest element. - [[nodiscard]] iterator end() noexcept { return iterator{this, head_, size_};} + [[nodiscard]] iterator end() noexcept { return iterator{this, tail_ + size_, size_};} // Const iterator to oldest element. [[nodiscard]] const_iterator cbegin() const noexcept { return const_iterator{this, tail_, 0};} // Const iterator to one past newest element. - [[nodiscard]] const_iterator cend() const noexcept { return const_iterator{this, head_, size_};} + [[nodiscard]] const_iterator cend() const noexcept { return const_iterator{this, tail_ + size_, size_};} // Check if buffer has no elements. [[nodiscard]] bool empty() const noexcept { return size_ == 0; } // Check if buffer is at capacity. From 27807fdd71897d4b53c94a76bb7bd863b954a8b8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 10:09:11 +0000 Subject: [PATCH 3/4] Changes before error encountered Co-authored-by: bugparty <1510776+bugparty@users.noreply.github.com> --- _codeql_build_dir/CMakeCache.txt | 608 ++ .../CMakeFiles/3.31.6/CMakeCCompiler.cmake | 81 + .../CMakeFiles/3.31.6/CMakeCXXCompiler.cmake | 101 + .../3.31.6/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 15968 bytes .../3.31.6/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15992 bytes .../CMakeFiles/3.31.6/CMakeSystem.cmake | 15 + .../3.31.6/CompilerIdC/CMakeCCompilerId.c | 904 ++ .../CMakeFiles/3.31.6/CompilerIdC/a.out | Bin 0 -> 16088 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 919 ++ .../CMakeFiles/3.31.6/CompilerIdCXX/a.out | Bin 0 -> 16096 bytes .../CMakeFiles/CMakeConfigureLog.yaml | 598 ++ .../CMakeDirectoryInformation.cmake | 16 + _codeql_build_dir/CMakeFiles/Makefile.cmake | 182 + _codeql_build_dir/CMakeFiles/Makefile2 | 324 + .../RingBufferTest.dir/DependInfo.cmake | 24 + .../CMakeFiles/RingBufferTest.dir/build.make | 121 + .../RingBufferTest.dir/cmake_clean.cmake | 13 + .../RingBufferTest.dir/compiler_depend.make | 2 + .../RingBufferTest.dir/compiler_depend.ts | 2 + .../CMakeFiles/RingBufferTest.dir/depend.make | 2 + .../CMakeFiles/RingBufferTest.dir/flags.make | 10 + .../CMakeFiles/RingBufferTest.dir/link.d | 103 + .../CMakeFiles/RingBufferTest.dir/link.txt | 1 + .../RingBufferTest.dir/progress.make | 3 + .../RingBufferTest.dir/test_main.cpp.o | Bin 0 -> 257552 bytes .../RingBufferTest.dir/test_main.cpp.o.d | 293 + .../CMakeFiles/TargetDirectories.txt | 33 + .../CMakeFiles/cmake.check_cache | 1 + _codeql_build_dir/CMakeFiles/progress.marks | 1 + _codeql_build_dir/CTestTestfile.cmake | 8 + _codeql_build_dir/Makefile | 300 + _codeql_build_dir/RingBufferTest | Bin 0 -> 622856 bytes .../RingBufferTest[1]_include.cmake | 5 + .../RingBufferTest[1]_tests.cmake | 45 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/progress.marks | 1 + .../googletest-build/CTestTestfile.cmake | 7 + .../_deps/googletest-build/Makefile | 203 + .../googletest-build/cmake_install.cmake | 56 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/gmock.dir/DependInfo.cmake | 23 + .../CMakeFiles/gmock.dir/build.make | 117 + .../CMakeFiles/gmock.dir/cmake_clean.cmake | 11 + .../gmock.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gmock.dir/compiler_depend.make | 2 + .../CMakeFiles/gmock.dir/compiler_depend.ts | 2 + .../CMakeFiles/gmock.dir/depend.make | 2 + .../CMakeFiles/gmock.dir/flags.make | 10 + .../googlemock/CMakeFiles/gmock.dir/link.txt | 2 + .../CMakeFiles/gmock.dir/progress.make | 3 + .../CMakeFiles/gmock.dir/src/gmock-all.cc.o | Bin 0 -> 231792 bytes .../CMakeFiles/gmock.dir/src/gmock-all.cc.o.d | 341 + .../gmock_main.dir/DependInfo.cmake | 23 + .../CMakeFiles/gmock_main.dir/build.make | 117 + .../gmock_main.dir/cmake_clean.cmake | 11 + .../gmock_main.dir/cmake_clean_target.cmake | 3 + .../gmock_main.dir/compiler_depend.make | 2 + .../gmock_main.dir/compiler_depend.ts | 2 + .../CMakeFiles/gmock_main.dir/depend.make | 2 + .../CMakeFiles/gmock_main.dir/flags.make | 10 + .../CMakeFiles/gmock_main.dir/link.txt | 2 + .../CMakeFiles/gmock_main.dir/progress.make | 3 + .../gmock_main.dir/src/gmock_main.cc.o | Bin 0 -> 2096 bytes .../gmock_main.dir/src/gmock_main.cc.o.d | 336 + .../googlemock/CMakeFiles/progress.marks | 1 + .../googlemock/CTestTestfile.cmake | 7 + .../googletest-build/googlemock/Makefile | 287 + .../googlemock/cmake_install.cmake | 76 + .../CMakeDirectoryInformation.cmake | 16 + .../GTestTargets-release.cmake | 49 + .../GTestTargets.cmake | 139 + .../CMakeFiles/gtest.dir/DependInfo.cmake | 23 + .../CMakeFiles/gtest.dir/build.make | 117 + .../CMakeFiles/gtest.dir/cmake_clean.cmake | 11 + .../gtest.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gtest.dir/compiler_depend.make | 2 + .../CMakeFiles/gtest.dir/compiler_depend.ts | 2 + .../CMakeFiles/gtest.dir/depend.make | 2 + .../CMakeFiles/gtest.dir/flags.make | 10 + .../googletest/CMakeFiles/gtest.dir/link.txt | 2 + .../CMakeFiles/gtest.dir/progress.make | 3 + .../CMakeFiles/gtest.dir/src/gtest-all.cc.o | Bin 0 -> 879656 bytes .../CMakeFiles/gtest.dir/src/gtest-all.cc.o.d | 362 + .../gtest_main.dir/DependInfo.cmake | 23 + .../CMakeFiles/gtest_main.dir/build.make | 117 + .../gtest_main.dir/cmake_clean.cmake | 11 + .../gtest_main.dir/cmake_clean_target.cmake | 3 + .../gtest_main.dir/compiler_depend.make | 2 + .../gtest_main.dir/compiler_depend.ts | 2 + .../CMakeFiles/gtest_main.dir/depend.make | 2 + .../CMakeFiles/gtest_main.dir/flags.make | 10 + .../CMakeFiles/gtest_main.dir/link.txt | 2 + .../CMakeFiles/gtest_main.dir/progress.make | 3 + .../gtest_main.dir/src/gtest_main.cc.o | Bin 0 -> 2200 bytes .../gtest_main.dir/src/gtest_main.cc.o.d | 288 + .../googletest/CMakeFiles/progress.marks | 1 + .../googletest/CTestTestfile.cmake | 6 + .../googletest-build/googletest/Makefile | 287 + .../googletest/cmake_install.cmake | 100 + .../googletest/generated/GTestConfig.cmake | 33 + .../generated/GTestConfigVersion.cmake | 43 + .../googletest/generated/gmock.pc | 10 + .../googletest/generated/gmock_main.pc | 10 + .../googletest/generated/gtest.pc | 9 + .../googletest/generated/gtest_main.pc | 10 + .../_deps/googletest-src/.clang-format | 4 + .../.github/ISSUE_TEMPLATE/00-bug_report.md | 43 + .../ISSUE_TEMPLATE/10-feature_request.md | 24 + .../.github/ISSUE_TEMPLATE/config.yml | 1 + .../_deps/googletest-src/.gitignore | 84 + .../_deps/googletest-src/BUILD.bazel | 190 + .../_deps/googletest-src/CMakeLists.txt | 32 + .../_deps/googletest-src/CONTRIBUTING.md | 130 + .../_deps/googletest-src/CONTRIBUTORS | 63 + .../_deps/googletest-src/LICENSE | 28 + .../_deps/googletest-src/README.md | 140 + .../_deps/googletest-src/WORKSPACE | 24 + .../googletest-src/ci/linux-presubmit.sh | 126 + .../googletest-src/ci/macos-presubmit.sh | 73 + .../_deps/googletest-src/docs/_config.yml | 1 + .../googletest-src/docs/_data/navigation.yml | 43 + .../googletest-src/docs/_layouts/default.html | 58 + .../_deps/googletest-src/docs/_sass/main.scss | 200 + .../_deps/googletest-src/docs/advanced.md | 2318 +++++ .../googletest-src/docs/assets/css/style.scss | 5 + .../docs/community_created_documentation.md | 7 + .../_deps/googletest-src/docs/faq.md | 693 ++ .../googletest-src/docs/gmock_cheat_sheet.md | 241 + .../googletest-src/docs/gmock_cook_book.md | 4301 +++++++++ .../_deps/googletest-src/docs/gmock_faq.md | 390 + .../googletest-src/docs/gmock_for_dummies.md | 700 ++ .../_deps/googletest-src/docs/index.md | 22 + .../_deps/googletest-src/docs/pkgconfig.md | 148 + .../_deps/googletest-src/docs/platforms.md | 35 + .../_deps/googletest-src/docs/primer.md | 482 + .../googletest-src/docs/quickstart-bazel.md | 161 + .../googletest-src/docs/quickstart-cmake.md | 156 + .../googletest-src/docs/reference/actions.md | 115 + .../docs/reference/assertions.md | 633 ++ .../googletest-src/docs/reference/matchers.md | 283 + .../googletest-src/docs/reference/mocking.md | 587 ++ .../googletest-src/docs/reference/testing.md | 1431 +++ .../_deps/googletest-src/docs/samples.md | 22 + .../googletest-src/googlemock/CMakeLists.txt | 218 + .../_deps/googletest-src/googlemock/README.md | 44 + .../googlemock/cmake/gmock.pc.in | 10 + .../googlemock/cmake/gmock_main.pc.in | 10 + .../googletest-src/googlemock/docs/README.md | 4 + .../googlemock/include/gmock/gmock-actions.h | 1687 ++++ .../include/gmock/gmock-cardinalities.h | 157 + .../include/gmock/gmock-function-mocker.h | 479 + .../googlemock/include/gmock/gmock-matchers.h | 5392 +++++++++++ .../include/gmock/gmock-more-actions.h | 573 ++ .../include/gmock/gmock-more-matchers.h | 92 + .../include/gmock/gmock-nice-strict.h | 261 + .../include/gmock/gmock-spec-builders.h | 2038 ++++ .../googlemock/include/gmock/gmock.h | 98 + .../include/gmock/internal/custom/README.md | 16 + .../internal/custom/gmock-generated-actions.h | 6 + .../gmock/internal/custom/gmock-matchers.h | 36 + .../gmock/internal/custom/gmock-port.h | 39 + .../gmock/internal/gmock-internal-utils.h | 459 + .../include/gmock/internal/gmock-port.h | 87 + .../include/gmock/internal/gmock-pp.h | 279 + .../googlemock/scripts/README.md | 5 + .../googlemock/scripts/fuse_gmock_files.py | 256 + .../googlemock/scripts/generator/LICENSE | 203 + .../googlemock/scripts/generator/README | 34 + .../scripts/generator/README.cppclean | 115 + .../scripts/generator/cpp/__init__.py | 0 .../googlemock/scripts/generator/cpp/ast.py | 1773 ++++ .../scripts/generator/cpp/gmock_class.py | 247 + .../scripts/generator/cpp/gmock_class_test.py | 570 ++ .../scripts/generator/cpp/keywords.py | 56 + .../scripts/generator/cpp/tokenize.py | 284 + .../googlemock/scripts/generator/cpp/utils.py | 37 + .../googlemock/scripts/generator/gmock_gen.py | 30 + .../googlemock/src/gmock-all.cc | 46 + .../googlemock/src/gmock-cardinalities.cc | 155 + .../googlemock/src/gmock-internal-utils.cc | 200 + .../googlemock/src/gmock-matchers.cc | 459 + .../googlemock/src/gmock-spec-builders.cc | 908 ++ .../googletest-src/googlemock/src/gmock.cc | 213 + .../googlemock/src/gmock_main.cc | 72 + .../googlemock/test/BUILD.bazel | 118 + .../googlemock/test/gmock-actions_test.cc | 1583 +++ .../test/gmock-cardinalities_test.cc | 429 + .../test/gmock-function-mocker_test.cc | 986 ++ .../test/gmock-internal-utils_test.cc | 720 ++ .../googlemock/test/gmock-matchers_test.cc | 8562 +++++++++++++++++ .../test/gmock-more-actions_test.cc | 1547 +++ .../googlemock/test/gmock-nice-strict_test.cc | 539 ++ .../googlemock/test/gmock-port_test.cc | 42 + .../googlemock/test/gmock-pp-string_test.cc | 206 + .../googlemock/test/gmock-pp_test.cc | 83 + .../test/gmock-spec-builders_test.cc | 2775 ++++++ .../googlemock/test/gmock_all_test.cc | 46 + .../googlemock/test/gmock_ex_test.cc | 80 + .../googlemock/test/gmock_leak_test.py | 104 + .../googlemock/test/gmock_leak_test_.cc | 99 + .../googlemock/test/gmock_link2_test.cc | 39 + .../googlemock/test/gmock_link_test.cc | 39 + .../googlemock/test/gmock_link_test.h | 690 ++ .../googlemock/test/gmock_output_test.py | 183 + .../googlemock/test/gmock_output_test_.cc | 309 + .../test/gmock_output_test_golden.txt | 317 + .../googlemock/test/gmock_stress_test.cc | 240 + .../googlemock/test/gmock_test.cc | 181 + .../googlemock/test/gmock_test_utils.py | 108 + .../googletest-src/googletest/CMakeLists.txt | 323 + .../_deps/googletest-src/googletest/README.md | 215 + .../googletest/cmake/Config.cmake.in | 9 + .../googletest/cmake/gtest.pc.in | 9 + .../googletest/cmake/gtest_main.pc.in | 10 + .../googletest/cmake/internal_utils.cmake | 344 + .../googletest/cmake/libgtest.la.in | 21 + .../googletest-src/googletest/docs/README.md | 4 + .../include/gtest/gtest-death-test.h | 346 + .../googletest/include/gtest/gtest-matchers.h | 930 ++ .../googletest/include/gtest/gtest-message.h | 219 + .../include/gtest/gtest-param-test.h | 507 + .../googletest/include/gtest/gtest-printers.h | 1029 ++ .../googletest/include/gtest/gtest-spi.h | 238 + .../include/gtest/gtest-test-part.h | 184 + .../include/gtest/gtest-typed-test.h | 329 + .../googletest/include/gtest/gtest.h | 2495 +++++ .../include/gtest/gtest_pred_impl.h | 359 + .../googletest/include/gtest/gtest_prod.h | 61 + .../include/gtest/internal/custom/README.md | 56 + .../gtest/internal/custom/gtest-port.h | 37 + .../gtest/internal/custom/gtest-printers.h | 42 + .../include/gtest/internal/custom/gtest.h | 37 + .../internal/gtest-death-test-internal.h | 304 + .../include/gtest/internal/gtest-filepath.h | 211 + .../include/gtest/internal/gtest-internal.h | 1560 +++ .../include/gtest/internal/gtest-param-util.h | 947 ++ .../include/gtest/internal/gtest-port-arch.h | 114 + .../include/gtest/internal/gtest-port.h | 2389 +++++ .../include/gtest/internal/gtest-string.h | 175 + .../include/gtest/internal/gtest-type-util.h | 183 + .../googletest/samples/prime_tables.h | 126 + .../googletest/samples/sample1.cc | 66 + .../googletest/samples/sample1.h | 41 + .../googletest/samples/sample10_unittest.cc | 139 + .../googletest/samples/sample1_unittest.cc | 151 + .../googletest/samples/sample2.cc | 54 + .../googletest/samples/sample2.h | 80 + .../googletest/samples/sample2_unittest.cc | 107 + .../googletest/samples/sample3-inl.h | 172 + .../googletest/samples/sample3_unittest.cc | 149 + .../googletest/samples/sample4.cc | 54 + .../googletest/samples/sample4.h | 53 + .../googletest/samples/sample4_unittest.cc | 53 + .../googletest/samples/sample5_unittest.cc | 196 + .../googletest/samples/sample6_unittest.cc | 217 + .../googletest/samples/sample7_unittest.cc | 117 + .../googletest/samples/sample8_unittest.cc | 154 + .../googletest/samples/sample9_unittest.cc | 156 + .../googletest/scripts/README.md | 5 + .../googletest/scripts/common.py | 83 + .../googletest/scripts/fuse_gtest_files.py | 253 + .../googletest/scripts/gen_gtest_pred_impl.py | 733 ++ .../googletest/scripts/gtest-config.in | 274 + .../googletest/scripts/release_docs.py | 158 + .../googletest/scripts/run_with_path.py | 32 + .../googletest/scripts/upload.py | 1402 +++ .../googletest/scripts/upload_gtest.py | 78 + .../googletest/src/gtest-all.cc | 48 + .../googletest/src/gtest-death-test.cc | 1644 ++++ .../googletest/src/gtest-filepath.cc | 369 + .../googletest/src/gtest-internal-inl.h | 1221 +++ .../googletest/src/gtest-matchers.cc | 97 + .../googletest/src/gtest-port.cc | 1433 +++ .../googletest/src/gtest-printers.cc | 533 + .../googletest/src/gtest-test-part.cc | 108 + .../googletest/src/gtest-typed-test.cc | 107 + .../googletest-src/googletest/src/gtest.cc | 6746 +++++++++++++ .../googletest/src/gtest_main.cc | 54 + .../googletest/test/BUILD.bazel | 590 ++ .../googletest-break-on-failure-unittest.py | 208 + .../googletest-break-on-failure-unittest_.cc | 86 + .../test/googletest-catch-exceptions-test.py | 236 + .../test/googletest-catch-exceptions-test_.cc | 293 + .../googletest/test/googletest-color-test.py | 127 + .../googletest/test/googletest-color-test_.cc | 62 + .../test/googletest-death-test-test.cc | 1542 +++ .../test/googletest-death-test_ex_test.cc | 92 + .../test/googletest-env-var-test.py | 120 + .../test/googletest-env-var-test_.cc | 132 + .../test/googletest-failfast-unittest.py | 410 + .../test/googletest-failfast-unittest_.cc | 167 + .../test/googletest-filepath-test.cc | 649 ++ .../test/googletest-filter-unittest.py | 639 ++ .../test/googletest-filter-unittest_.cc | 137 + .../googletest-global-environment-unittest.py | 72 + ...googletest-global-environment-unittest_.cc | 58 + .../test/googletest-json-outfiles-test.py | 191 + .../test/googletest-json-output-unittest.py | 848 ++ .../test/googletest-list-tests-unittest.py | 205 + .../test/googletest-list-tests-unittest_.cc | 156 + .../test/googletest-listener-test.cc | 518 + .../test/googletest-message-test.cc | 158 + .../test/googletest-options-test.cc | 219 + .../googletest-output-test-golden-lin.txt | 1180 +++ .../googletest/test/googletest-output-test.py | 346 + .../test/googletest-output-test_.cc | 1108 +++ ...oogletest-param-test-invalid-name1-test.py | 63 + ...ogletest-param-test-invalid-name1-test_.cc | 50 + ...oogletest-param-test-invalid-name2-test.py | 62 + ...ogletest-param-test-invalid-name2-test_.cc | 55 + .../test/googletest-param-test-test.cc | 1119 +++ .../test/googletest-param-test-test.h | 51 + .../test/googletest-param-test2-test.cc | 61 + .../googletest/test/googletest-port-test.cc | 1276 +++ .../test/googletest-printers-test.cc | 1962 ++++ .../test/googletest-setuptestsuite-test.py | 54 + .../test/googletest-setuptestsuite-test_.cc | 49 + .../test/googletest-shuffle-test.py | 323 + .../test/googletest-shuffle-test_.cc | 101 + .../test/googletest-test-part-test.cc | 230 + .../test/googletest-throw-on-failure-test.py | 168 + .../test/googletest-throw-on-failure-test_.cc | 71 + .../test/googletest-uninitialized-test.py | 67 + .../test/googletest-uninitialized-test_.cc | 42 + .../googletest/test/gtest-typed-test2_test.cc | 40 + .../googletest/test/gtest-typed-test_test.cc | 437 + .../googletest/test/gtest-typed-test_test.h | 60 + .../test/gtest-unittest-api_test.cc | 328 + .../googletest/test/gtest_all_test.cc | 46 + .../test/gtest_assert_by_exception_test.cc | 116 + .../googletest/test/gtest_environment_test.cc | 188 + .../googletest/test/gtest_help_test.py | 172 + .../googletest/test/gtest_help_test_.cc | 45 + .../googletest/test/gtest_json_test_utils.py | 60 + .../test/gtest_list_output_unittest.py | 286 + .../test/gtest_list_output_unittest_.cc | 77 + .../googletest/test/gtest_main_unittest.cc | 44 + .../googletest/test/gtest_no_test_unittest.cc | 54 + .../test/gtest_pred_impl_unittest.cc | 2422 +++++ .../test/gtest_premature_exit_test.cc | 126 + .../googletest/test/gtest_prod_test.cc | 56 + .../googletest/test/gtest_repeat_test.cc | 233 + .../test/gtest_skip_check_output_test.py | 59 + ...test_skip_environment_check_output_test.py | 54 + .../gtest_skip_in_environment_setup_test.cc | 49 + .../googletest/test/gtest_skip_test.cc | 55 + .../googletest/test/gtest_sole_header_test.cc | 56 + .../googletest/test/gtest_stress_test.cc | 248 + .../gtest_test_macro_stack_footprint_test.cc | 89 + .../googletest/test/gtest_test_utils.py | 312 + .../googletest/test/gtest_testbridge_test.py | 63 + .../googletest/test/gtest_testbridge_test_.cc | 43 + .../test/gtest_throw_on_failure_ex_test.cc | 90 + .../googletest/test/gtest_unittest.cc | 7784 +++++++++++++++ .../test/gtest_xml_outfile1_test_.cc | 43 + .../test/gtest_xml_outfile2_test_.cc | 43 + .../test/gtest_xml_outfiles_test.py | 135 + .../test/gtest_xml_output_unittest.py | 415 + .../test/gtest_xml_output_unittest_.cc | 193 + .../googletest/test/gtest_xml_test_utils.py | 197 + .../googletest/test/production.cc | 35 + .../googletest/test/production.h | 54 + .../_deps/googletest-src/library.json | 62 + .../_deps/googletest-subbuild/CMakeCache.txt | 117 + .../CMakeFiles/3.31.6/CMakeSystem.cmake | 15 + .../CMakeFiles/CMakeConfigureLog.yaml | 11 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/CMakeRuleHashes.txt | 11 + .../CMakeFiles/Makefile.cmake | 56 + .../googletest-subbuild/CMakeFiles/Makefile2 | 122 + .../CMakeFiles/TargetDirectories.txt | 3 + .../CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/googletest-populate-complete | 0 .../googletest-populate.dir/DependInfo.cmake | 22 + .../googletest-populate.dir/Labels.json | 46 + .../googletest-populate.dir/Labels.txt | 14 + .../googletest-populate.dir/build.make | 159 + .../googletest-populate.dir/cmake_clean.cmake | 17 + .../compiler_depend.make | 2 + .../compiler_depend.ts | 2 + .../googletest-populate.dir/progress.make | 10 + .../CMakeFiles/progress.marks | 1 + .../_deps/googletest-subbuild/CMakeLists.txt | 34 + .../_deps/googletest-subbuild/Makefile | 162 + .../googletest-subbuild/cmake_install.cmake | 61 + .../download-googletest-populate.cmake | 166 + .../extract-googletest-populate.cmake | 65 + .../googletest-populate-build | 0 .../googletest-populate-configure | 0 .../googletest-populate-done | 0 .../googletest-populate-download | 0 .../googletest-populate-install | 0 .../googletest-populate-mkdir | 0 .../googletest-populate-patch | 0 .../googletest-populate-patch-info.txt | 6 + .../googletest-populate-test | 0 .../googletest-populate-update | 0 .../googletest-populate-update-info.txt | 7 + .../googletest-populate-urlinfo.txt | 12 + .../verify-googletest-populate.cmake | 0 .../src/release-1.11.0.zip | Bin 0 -> 1121369 bytes .../tmp/googletest-populate-cfgcmd.txt | 1 + .../tmp/googletest-populate-mkdirs.cmake | 27 + _codeql_build_dir/cmake_install.cmake | 71 + _codeql_build_dir/lib/libgmock.a | Bin 0 -> 243418 bytes _codeql_build_dir/lib/libgmock_main.a | Bin 0 -> 2238 bytes _codeql_build_dir/lib/libgtest.a | Bin 0 -> 941540 bytes _codeql_build_dir/lib/libgtest_main.a | Bin 0 -> 2342 bytes _codeql_detected_source_root | 1 + 409 files changed, 123402 insertions(+) create mode 100644 _codeql_build_dir/CMakeCache.txt create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_C.bin create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_CXX.bin create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out create mode 100644 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 _codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out create mode 100644 _codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 _codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/CMakeFiles/Makefile.cmake create mode 100644 _codeql_build_dir/CMakeFiles/Makefile2 create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o create mode 100644 _codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d create mode 100644 _codeql_build_dir/CMakeFiles/TargetDirectories.txt create mode 100644 _codeql_build_dir/CMakeFiles/cmake.check_cache create mode 100644 _codeql_build_dir/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/CTestTestfile.cmake create mode 100644 _codeql_build_dir/Makefile create mode 100755 _codeql_build_dir/RingBufferTest create mode 100644 _codeql_build_dir/RingBufferTest[1]_include.cmake create mode 100644 _codeql_build_dir/RingBufferTest[1]_tests.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-build/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/CTestTestfile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/GTestConfig.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gtest.pc create mode 100644 _codeql_build_dir/_deps/googletest-build/googletest/generated/gtest_main.pc create mode 100644 _codeql_build_dir/_deps/googletest-src/.clang-format create mode 100644 _codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md create mode 100644 _codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md create mode 100644 _codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml create mode 100644 _codeql_build_dir/_deps/googletest-src/.gitignore create mode 100644 _codeql_build_dir/_deps/googletest-src/BUILD.bazel create mode 100644 _codeql_build_dir/_deps/googletest-src/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/CONTRIBUTING.md create mode 100644 _codeql_build_dir/_deps/googletest-src/CONTRIBUTORS create mode 100644 _codeql_build_dir/_deps/googletest-src/LICENSE create mode 100644 _codeql_build_dir/_deps/googletest-src/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/WORKSPACE create mode 100644 _codeql_build_dir/_deps/googletest-src/ci/linux-presubmit.sh create mode 100644 _codeql_build_dir/_deps/googletest-src/ci/macos-presubmit.sh create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_config.yml create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_data/navigation.yml create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/_sass/main.scss create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/advanced.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/community_created_documentation.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/faq.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_cheat_sheet.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_cook_book.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_faq.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/gmock_for_dummies.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/index.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/pkgconfig.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/platforms.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/primer.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/quickstart-bazel.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/quickstart-cmake.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/actions.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/assertions.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/matchers.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/mocking.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/reference/testing.md create mode 100644 _codeql_build_dir/_deps/googletest-src/docs/samples.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/docs/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/README.md create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/fuse_gmock_files.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/LICENSE create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/README create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/README.cppclean create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/__init__.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/ast.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/gmock_class.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/gmock_class_test.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/keywords.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/tokenize.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/cpp/utils.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/scripts/generator/gmock_gen.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-all.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-cardinalities.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-internal-utils.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-matchers.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-spec-builders.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/src/gmock_main.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/BUILD.bazel create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-actions_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-cardinalities_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-function-mocker_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-internal-utils_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-matchers_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-more-actions_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-nice-strict_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-port_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-pp-string_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-pp_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock-spec-builders_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_all_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_ex_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_leak_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_leak_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_link2_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_link_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_link_test.h create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_output_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_output_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_output_test_golden.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_stress_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googlemock/test/gmock_test_utils.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/Config.cmake.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/gtest.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/gtest_main.pc.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/internal_utils.cmake create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/cmake/libgtest.la.in create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/docs/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-printers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-spi.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/prime_tables.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample1.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample1.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample10_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample1_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample2.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample2.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample2_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample3-inl.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample3_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample4.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample4.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample4_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample5_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample6_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample7_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample8_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/samples/sample9_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/scripts/README.md create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/scripts/common.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/fuse_gtest_files.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/gen_gtest_pred_impl.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/gtest-config.in create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/release_docs.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/run_with_path.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/upload.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/scripts/upload_gtest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-death-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-filepath.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-internal-inl.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-matchers.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-port.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-printers.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-test-part.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest-typed-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/src/gtest_main.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/BUILD.bazel create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-break-on-failure-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-break-on-failure-unittest_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-catch-exceptions-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-catch-exceptions-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-color-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-color-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-death-test-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-death-test_ex_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-env-var-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-env-var-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-failfast-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-failfast-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-filepath-test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-filter-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-filter-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-global-environment-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-global-environment-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-json-outfiles-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-json-output-unittest.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-list-tests-unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-list-tests-unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-listener-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-message-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-options-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-output-test-golden-lin.txt create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-output-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-output-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name1-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name1-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name2-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-invalid-name2-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test-test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-param-test2-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-port-test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-printers-test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-setuptestsuite-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-setuptestsuite-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-shuffle-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-shuffle-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-test-part-test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-throw-on-failure-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-throw-on-failure-test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-uninitialized-test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/googletest-uninitialized-test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-typed-test2_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-typed-test_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-typed-test_test.h create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest-unittest-api_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_all_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_assert_by_exception_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_environment_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_help_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_help_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_json_test_utils.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_list_output_unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_list_output_unittest_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_main_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_no_test_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_pred_impl_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_premature_exit_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_prod_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_repeat_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_check_output_test.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_environment_check_output_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_in_environment_setup_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_skip_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_sole_header_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_stress_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_test_macro_stack_footprint_test.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_test_utils.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_testbridge_test.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_testbridge_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_throw_on_failure_ex_test.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_unittest.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_outfile1_test_.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_outfile2_test_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_outfiles_test.py create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_output_unittest.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_output_unittest_.cc create mode 100755 _codeql_build_dir/_deps/googletest-src/googletest/test/gtest_xml_test_utils.py create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/production.cc create mode 100644 _codeql_build_dir/_deps/googletest-src/googletest/test/production.h create mode 100644 _codeql_build_dir/_deps/googletest-src/library.json create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeCache.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/3.31.6/CMakeSystem.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/CMakeRuleHashes.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/Makefile.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/Makefile2 create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/TargetDirectories.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/cmake.check_cache create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate-complete create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/DependInfo.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/Labels.json create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/Labels.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/build.make create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/cmake_clean.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/compiler_depend.make create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/compiler_depend.ts create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/googletest-populate.dir/progress.make create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeFiles/progress.marks create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/CMakeLists.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/Makefile create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/cmake_install.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/download-googletest-populate.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/extract-googletest-populate.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-build create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-configure create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-done create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-download create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-install create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-mkdir create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-patch create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-patch-info.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-test create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-update create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-update-info.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-urlinfo.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/verify-googletest-populate.cmake create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/src/release-1.11.0.zip create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-cfgcmd.txt create mode 100644 _codeql_build_dir/_deps/googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-mkdirs.cmake create mode 100644 _codeql_build_dir/cmake_install.cmake create mode 100644 _codeql_build_dir/lib/libgmock.a create mode 100644 _codeql_build_dir/lib/libgmock_main.a create mode 100644 _codeql_build_dir/lib/libgtest.a create mode 100644 _codeql_build_dir/lib/libgtest_main.a create mode 120000 _codeql_detected_source_root diff --git a/_codeql_build_dir/CMakeCache.txt b/_codeql_build_dir/CMakeCache.txt new file mode 100644 index 0000000..72b49b0 --- /dev/null +++ b/_codeql_build_dir/CMakeCache.txt @@ -0,0 +1,608 @@ +# This is the CMakeCache file. +# For build in directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir +# It was generated by CMake: /usr/local/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//No help, variable specified on the command line. +BUILD_DOCS:UNINITIALIZED=OFF + +//No help, variable specified on the command line. +BUILD_DOCUMENTATION:UNINITIALIZED=OFF + +//Builds the googlemock subproject +BUILD_GMOCK:BOOL=ON + +//No help, variable specified on the command line. +CATKIN_ENABLE_TESTING:UNINITIALIZED=OFF + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING=Release + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-13 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-13 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-13 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-13 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/pkgRedirects + +//User executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//Read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//Read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//Documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//Info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//Object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//Program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//Locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//Modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//Man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Run-time variable data (LOCALSTATEDIR/run) +CMAKE_INSTALL_RUNSTATEDIR:PATH= + +//System admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//Modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//Read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=RingBuffer + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=1.11.0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=11 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=ON + +//Directory under which to collect all populated content +FETCHCONTENT_BASE_DIR:PATH=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps + +//Disables all attempts to download or update content and assumes +// source dirs already exist +FETCHCONTENT_FULLY_DISCONNECTED:BOOL=OFF + +//Enables QUIET option for all content population +FETCHCONTENT_QUIET:BOOL=ON + +//When not empty, overrides where to find pre-populated content +// for googletest +FETCHCONTENT_SOURCE_DIR_GOOGLETEST:PATH= + +//Enables UPDATE_DISCONNECTED behavior for all content population +FETCHCONTENT_UPDATES_DISCONNECTED:BOOL=OFF + +//Enables UPDATE_DISCONNECTED behavior just for population of googletest +FETCHCONTENT_UPDATES_DISCONNECTED_GOOGLETEST:BOOL=OFF + +//Enable installation of googletest. (Projects embedding googletest +// may want to turn this OFF.) +INSTALL_GTEST:BOOL=ON + +//Build RingBuffer tests +RINGBUFFER_BUILD_TESTS:BOOL=ON + +//Value Computed by CMake +RingBuffer_BINARY_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +//Value Computed by CMake +RingBuffer_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +RingBuffer_SOURCE_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp + +//Value Computed by CMake +gmock_BINARY_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock + +//Value Computed by CMake +gmock_IS_TOP_LEVEL:STATIC=OFF + +//Dependencies for the target +gmock_LIB_DEPENDS:STATIC=general;gtest; + +//Value Computed by CMake +gmock_SOURCE_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock + +//Build all of Google Mock's own tests. +gmock_build_tests:BOOL=OFF + +//Dependencies for the target +gmock_main_LIB_DEPENDS:STATIC=general;gmock; + +//Value Computed by CMake +googletest-distribution_BINARY_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build + +//Value Computed by CMake +googletest-distribution_IS_TOP_LEVEL:STATIC=OFF + +//Value Computed by CMake +googletest-distribution_SOURCE_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src + +//Value Computed by CMake +gtest_BINARY_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest + +//Value Computed by CMake +gtest_IS_TOP_LEVEL:STATIC=OFF + +//Value Computed by CMake +gtest_SOURCE_DIR:STATIC=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +//Build gtest's sample programs. +gtest_build_samples:BOOL=OFF + +//Build all of gtest's own tests. +gtest_build_tests:BOOL=OFF + +//Disable uses of pthreads in gtest. +gtest_disable_pthreads:BOOL=OFF + +//Use shared (DLL) run-time lib even when Google Test is built +// as static lib. +gtest_force_shared_crt:BOOL=OFF + +//Build gtest with internal symbols hidden in shared libraries. +gtest_hide_internal_symbols:BOOL=OFF + +//Dependencies for the target +gtest_main_LIB_DEPENDS:STATIC=general;gtest; + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=31 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=6 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/local/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/local/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/local/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/local/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Test CMAKE_HAVE_LIBC_PTHREAD +CMAKE_HAVE_LIBC_PTHREAD:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/runner/work/RingBufferCpp/RingBufferCpp +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR +CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=4 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/local/share/cmake-3.31 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding Python +FIND_PACKAGE_MESSAGE_DETAILS_Python:INTERNAL=[/usr/bin/python3.12][cfound components: Interpreter ][v3.12.3()] +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//linker supports push/pop state +_CMAKE_CXX_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//linker supports push/pop state +_CMAKE_C_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr/local +//Compiler reason failure +_Python_Compiler_REASON_FAILURE:INTERNAL= +//Development reason failure +_Python_Development_REASON_FAILURE:INTERNAL= +//Path to a program. +_Python_EXECUTABLE:INTERNAL=/usr/bin/python3.12 +//Python Properties +_Python_INTERPRETER_PROPERTIES:INTERNAL=Python;3;12;3;64;32;;cpython-312-x86_64-linux-gnu;abi3;/usr/lib/python3.12;/usr/lib/python3.12;/usr/local/lib/python3.12/dist-packages;/usr/local/lib/python3.12/dist-packages +_Python_INTERPRETER_SIGNATURE:INTERNAL=f811b8a062a8994e96ffe87747bf9bfe +//NumPy reason failure +_Python_NumPy_REASON_FAILURE:INTERNAL= +cmake_package_name:INTERNAL=GTest +generated_dir:INTERNAL=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/generated +//ADVANCED property for variable: gmock_build_tests +gmock_build_tests-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_build_samples +gtest_build_samples-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_build_tests +gtest_build_tests-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_disable_pthreads +gtest_disable_pthreads-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_force_shared_crt +gtest_force_shared_crt-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: gtest_hide_internal_symbols +gtest_hide_internal_symbols-ADVANCED:INTERNAL=1 +targets_export_name:INTERNAL=GTestTargets + diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake new file mode 100644 index 0000000..9f07061 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCCompiler.cmake @@ -0,0 +1,81 @@ +set(CMAKE_C_COMPILER "/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "13.3.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_STANDARD_LATEST "23") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-13") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_C_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_C_COMPILER_LINKER_ID "GNU") +set(CMAKE_C_COMPILER_LINKER_VERSION 2.42) +set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED ) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..d143fcd --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeCXXCompiler.cmake @@ -0,0 +1,101 @@ +set(CMAKE_CXX_COMPILER "/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "13.3.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_STANDARD_LATEST "23") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") +set(CMAKE_CXX26_COMPILE_FEATURES "") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-13") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") +set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.42) +set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang IN ITEMS C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED ) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") +set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") + +set(CMAKE_CXX_COMPILER_IMPORT_STD "") +### Imported target for C++23 standard library +set(CMAKE_CXX23_COMPILER_IMPORT_STD_NOT_FOUND_MESSAGE "Unsupported generator: Unix Makefiles") + + + diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_C.bin b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..87f287194a15f3106a57cf4ff4b57eba7b928fa6 GIT binary patch literal 15968 zcmeHOeT)@X6~FH-3yXZbM+>?F!lqludsjp&cYT^ffv|^f=RcwL^vW;lA6?mR=?>Udz z;caWGF`CSInK}3T?)lw&=ggh=?z}m3IN8%3jYI@Xo%oQI%msUn#8iDkDX3L)E;>^;5MBowd5u`8p;syxdQie6M2)=J#F(dQSPME1vG+#c2~rF!&VH-2z%?3$5y_0o6tMfN`Rr{|s5#?c4IjU4nr!S;BH zu#J79560uzonMcvvFF@|*nHR)!`6{};o`^VcfR<8^A8?6YyTp*aO*=09{ce5a!dN9 zOXu$0yYimHUq1A7WBpU$I;&v&x74V`^P<(jbF<)Iodv%O@VI!Jh$o=nlLJsjTqJxT z6pu^1Q8WhdTLFI;Y(Yr_pw(#S5a3HN%9>(e%u$A5y9J_`po#Myi3)KNbX+vvG){~& z`mbN296w3^254+w(-g3baABG-qXx~QXStr4vz$C2gJYICgY6E^cH=y;BxCGJftYhz#E@BUpXR=I07Dc zUMQTRwA_K|Stp((?0cX8B23??__6ec?@9W8N@Th|1{(=wZYZoh~d^pb$#HW2Y_lQlS2w{A>>_scTGLHVF;fy?l%H~G^uB?3&_OaCof&P`X&ww=)Tiqq3z420N z;_SzaiQgMX|1h<4Ai1%;@pn?j1%<_qPk<+TLxW! z1k2F%{K{l(^$~PDLmK=Y>AyLRYW;O%V#;{-FWZf0r|XQ!bH>^0-co2_Ej7?knN;Iq zK92XuHmnw<+xHkpw?(mNOuXzZG>&hZ3&w@@l}hD826oTYUxT~u$bR5f`$zsC4?-mt z_5g3g(>`>U-X_uX)RUzkgq7 zNNZnDYG9xzX(s!+Qtf@_W^vyh|gS3UanLQfIbEK80g1A8=xPa zs#H#aM!{#QD3SYiiO5(yvSQ)9hLiB%2l17#9RQAeme(~;J~>(g7(T#S2eC=hbl@9p}i&n;sbALLMgN*)1abQOd`AJK3DC zw}NcG^;u3f=k4MB5(?Mgjw9TfO1q8f zUnQHzMa}=`6z7Nkn=Nww&e|{KnjmbX!eTmw zX}=i$&g1X$85O$+U2mgafW&Y3x6SmdVF5tVD-8|lgW^WAx#{K1K};W~P+OjRVDJnc(To zaP921?y);Np${i(yX_q*7@SObzwsBMnRbRTh2638H&taF&&%2~YT;<1)9zjEz4Bj2 z6Vl;vfH?MI!5p#j8OW+PyYA|1?@e_A3NK!mNrMPR*Din{0U!UcMCy*7{*Lw@v%kB0 zcXGfSXzzgkGKD-0@CzjPCwv+6|Lv51^@72ydHpkAJ*W;8)BJ^A9M5@H8novsJ;Eg? z53eJP3O!%&Y<)Oi(nsCGsO@^=J}6ys;H4QSLlB(8CY)^2eZ(q`2t6~Nhc1+c7Z_yC zCv3Oq6!J3+6Y5+$Yav1CI8}r`npHb}xBvyu9)rC+ow{3)??LGH2+gpO4Di`fd^Ob+ zgUiskm2(DRIQSZc4sS&W9p-orrtXaE=S>>8K7vaXzT=bx-*@Bn5mifHE~9=oY`BJD z{%r4cp)U%rZ z&+9tY{Cm#hXFt~W10UCnZ1cL2bu;x896t}>1QhU4na}H3)@5?!{)5N=5Y*!_aeei7 zmVR$}{Z7qP!^`&90(^~ltOGyW!REyy0e&+PSicef+W~%p2&^-K6Bcami2$G1J*@fu z2Hd3Z^kVxo6tD}9ztE_L^ykQAMKGJq(kI&;b07Dn%^ZK#80lkGt$o-8S^I1xndi#h-hBljxK{M)ODDlp%#t8>rio1g~2MFYd@81Kz_JpBEK_gg%6A6;C)8zqqS YfyTLCRf}uq+WaN>!veA}KnR%PpD9X5TL1t6 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_CXX.bin b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..e90f3f71d98d8b48fdca37fdc4f6d991fd1db519 GIT binary patch literal 15992 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 lrm#WB={^$3kg!$RQ-Ee*hEc8gl>u literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake new file mode 100644 index 0000000..b2715a6 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.11.0-1018-azure") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.11.0-1018-azure") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.11.0-1018-azure") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.11.0-1018-azure") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..50d95e5 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,904 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "ARM" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#define C_STD_99 199901L +#define C_STD_11 201112L +#define C_STD_17 201710L +#define C_STD_23 202311L + +#ifdef __STDC_VERSION__ +# define C_STD __STDC_VERSION__ +#endif + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif C_STD > C_STD_17 +# define C_VERSION "23" +#elif C_STD > C_STD_11 +# define C_VERSION "17" +#elif C_STD > C_STD_99 +# define C_VERSION "11" +#elif C_STD >= C_STD_99 +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..ecc315e71b4e62a6558ef29ebb804b7c2bdf9e59 GIT binary patch literal 16088 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 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "ARM" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#define CXX_STD_98 199711L +#define CXX_STD_11 201103L +#define CXX_STD_14 201402L +#define CXX_STD_17 201703L +#define CXX_STD_20 202002L +#define CXX_STD_23 202302L + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) +# if _MSVC_LANG > CXX_STD_17 +# define CXX_STD _MSVC_LANG +# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17 +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 +# define CXX_STD CXX_STD_17 +# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# elif defined(__INTEL_CXX11_MODE__) +# define CXX_STD CXX_STD_11 +# else +# define CXX_STD CXX_STD_98 +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# if _MSVC_LANG > __cplusplus +# define CXX_STD _MSVC_LANG +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__NVCOMPILER) +# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__INTEL_COMPILER) || defined(__PGI) +# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes) +# define CXX_STD CXX_STD_17 +# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__) +# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define CXX_STD CXX_STD_11 +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > CXX_STD_23 + "26" +#elif CXX_STD > CXX_STD_20 + "23" +#elif CXX_STD > CXX_STD_17 + "20" +#elif CXX_STD > CXX_STD_14 + "17" +#elif CXX_STD > CXX_STD_11 + "14" +#elif CXX_STD >= CXX_STD_11 + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out b/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..c8ced32cf082708045baa23211fbf858c298928d GIT binary patch literal 16096 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 ASpWb4 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml b/_codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..544c386 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,598 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:2 (project)" + message: | + The system is: Linux - 6.11.0-1018-azure - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:2 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-FXspBh" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-FXspBh" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-FXspBh' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_22996/fast + /usr/bin/gmake -f CMakeFiles/cmTC_22996.dir/build.make CMakeFiles/cmTC_22996.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-FXspBh' + Building CXX object CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_22996.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_22996.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cclEKtkL.s + GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu) + compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13" + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/include/c++/13 + /usr/include/x86_64-linux-gnu/c++/13 + /usr/include/c++/13/backward + /usr/lib/gcc/x86_64-linux-gnu/13/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + Compiler executable checksum: c81c05345ce537099dafd5580045814a + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_22996.dir/' + as -v --64 -o CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o /tmp/cclEKtkL.s + GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42 + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_22996 + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_22996.dir/link.txt --verbose=1 + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_22996' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_22996.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cckaW6gF.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_22996 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + collect2 version 13.3.0 + /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cckaW6gF.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_22996 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + GNU ld (GNU Binutils for Ubuntu) 2.42 + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_22996' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_22996.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -Wl,-v CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_22996 + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-FXspBh' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/13] + add: [/usr/include/x86_64-linux-gnu/c++/13] + add: [/usr/include/c++/13/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/13/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/13] ==> [/usr/include/c++/13] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/13] ==> [/usr/include/x86_64-linux-gnu/c++/13] + collapse include dir [/usr/include/c++/13/backward] ==> [/usr/include/c++/13/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/13/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/13/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-FXspBh'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_22996/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_22996.dir/build.make CMakeFiles/cmTC_22996.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-FXspBh'] + ignore line: [Building CXX object CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -v -o CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_22996.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_22996.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cclEKtkL.s] + ignore line: [GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 13.3.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/13] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/13] + ignore line: [ /usr/include/c++/13/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/13/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: c81c05345ce537099dafd5580045814a] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_22996.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o /tmp/cclEKtkL.s] + ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_22996] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_22996.dir/link.txt --verbose=1] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_22996' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_22996.'] + link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cckaW6gF.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_22996 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cckaW6gF.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_22996] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + ignore line: [collect2 version 13.3.0] + ignore line: [/usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cckaW6gF.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_22996 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_22996.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + linker tool for 'CXX': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13] ==> [/usr/lib/gcc/x86_64-linux-gnu/13] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:255 (cmake_determine_linker_id)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:2 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.42 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + + The C compiler identification is GNU, found in: + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/3.31.6/CompilerIdC/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-1XuZir" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-1XuZir" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-1XuZir' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_8217c/fast + /usr/bin/gmake -f CMakeFiles/cmTC_8217c.dir/build.make CMakeFiles/cmTC_8217c.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-1XuZir' + Building C object CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c + Using built-in specs. + COLLECT_GCC=/usr/bin/cc + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_8217c.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_8217c.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccAZcY2S.s + GNU C17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu) + compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/13/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + Compiler executable checksum: 38987c28e967c64056a6454abdef726e + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_8217c.dir/' + as -v --64 -o CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o /tmp/ccAZcY2S.s + GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42 + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.' + Linking C executable cmTC_8217c + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8217c.dir/link.txt --verbose=1 + Using built-in specs. + COLLECT_GCC=/usr/bin/cc + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) + COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_8217c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_8217c.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrvMCXe.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_8217c /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + collect2 version 13.3.0 + /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrvMCXe.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_8217c /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + GNU ld (GNU Binutils for Ubuntu) 2.42 + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_8217c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_8217c.' + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -Wl,-v -rdynamic CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o -o cmTC_8217c + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-1XuZir' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/13/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/13/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/13/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-1XuZir'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_8217c/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_8217c.dir/build.make CMakeFiles/cmTC_8217c.dir/build] + ignore line: [gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-1XuZir'] + ignore line: [Building C object CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o] + ignore line: [/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -v -o CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_8217c.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_8217c.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccAZcY2S.s] + ignore line: [GNU C17 (Ubuntu 13.3.0-6ubuntu2~24.04) version 13.3.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 13.3.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/13/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 38987c28e967c64056a6454abdef726e] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_8217c.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o /tmp/ccAZcY2S.s] + ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_8217c] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8217c.dir/link.txt --verbose=1] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_8217c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_8217c.'] + link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrvMCXe.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_8217c /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccrvMCXe.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_8217c] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + ignore line: [collect2 version 13.3.0] + ignore line: [/usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrvMCXe.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_8217c /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_8217c.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + linker tool for 'C': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13] ==> [/usr/lib/gcc/x86_64-linux-gnu/13] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:255 (cmake_determine_linker_id)" + - "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "_codeql_build_dir/_deps/googletest-src/CMakeLists.txt:10 (project)" + message: | + Running the C compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.42 + - + kind: "try_compile-v1" + backtrace: + - "/usr/local/share/cmake-3.31/Modules/Internal/CheckSourceCompiles.cmake:108 (try_compile)" + - "/usr/local/share/cmake-3.31/Modules/CheckCSourceCompiles.cmake:58 (cmake_check_source_compiles)" + - "/usr/local/share/cmake-3.31/Modules/FindThreads.cmake:97 (CHECK_C_SOURCE_COMPILES)" + - "/usr/local/share/cmake-3.31/Modules/FindThreads.cmake:163 (_threads_check_libc)" + - "_codeql_build_dir/_deps/googletest-src/googletest/cmake/internal_utils.cmake:65 (find_package)" + - "_codeql_build_dir/_deps/googletest-src/googletest/CMakeLists.txt:93 (config_compiler_and_linker)" + checks: + - "Performing Test CMAKE_HAVE_LIBC_PTHREAD" + directories: + source: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-47zXiH" + binary: "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-47zXiH" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_HAVE_LIBC_PTHREAD" + cached: true + stdout: | + Change Dir: '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-47zXiH' + + Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_48e1d/fast + /usr/bin/gmake -f CMakeFiles/cmTC_48e1d.dir/build.make CMakeFiles/cmTC_48e1d.dir/build + gmake[1]: Entering directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-47zXiH' + Building C object CMakeFiles/cmTC_48e1d.dir/src.c.o + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_48e1d.dir/src.c.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-47zXiH/src.c + Linking C executable cmTC_48e1d + /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_48e1d.dir/link.txt --verbose=1 + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/cc -rdynamic CMakeFiles/cmTC_48e1d.dir/src.c.o -o cmTC_48e1d + gmake[1]: Leaving directory '/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/CMakeScratch/TryCompile-47zXiH' + + exitCode: 0 +... diff --git a/_codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/_codeql_build_dir/CMakeFiles/Makefile.cmake b/_codeql_build_dir/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..959a483 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/Makefile.cmake @@ -0,0 +1,182 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "/home/runner/work/RingBufferCpp/RingBufferCpp/CMakeLists.txt" + "CMakeFiles/3.31.6/CMakeCCompiler.cmake" + "CMakeFiles/3.31.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.31.6/CMakeSystem.cmake" + "_deps/googletest-src/CMakeLists.txt" + "_deps/googletest-src/googlemock/CMakeLists.txt" + "_deps/googletest-src/googlemock/cmake/gmock.pc.in" + "_deps/googletest-src/googlemock/cmake/gmock_main.pc.in" + "_deps/googletest-src/googletest/CMakeLists.txt" + "_deps/googletest-src/googletest/cmake/Config.cmake.in" + "_deps/googletest-src/googletest/cmake/gtest.pc.in" + "_deps/googletest-src/googletest/cmake/gtest_main.pc.in" + "_deps/googletest-src/googletest/cmake/internal_utils.cmake" + "/usr/local/share/cmake-3.31/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeCCompiler.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeCCompilerABI.c" + "/usr/local/share/cmake-3.31/Modules/CMakeCInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeCXXCompiler.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp" + "/usr/local/share/cmake-3.31/Modules/CMakeCXXInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeCompilerIdDetection.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDependentOption.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineCompilerSupport.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeFindBinUtils.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeGenericSystem.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeInitializeConfigs.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeLanguageInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakePackageConfigHelpers.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeParseImplicitIncludeInfo.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeParseLibraryArchitecture.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeSystem.cmake.in" + "/usr/local/share/cmake-3.31/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeTestCompilerCommon.cmake" + "/usr/local/share/cmake-3.31/Modules/CMakeUnixFindMake.cmake" + "/usr/local/share/cmake-3.31/Modules/CheckCSourceCompiles.cmake" + "/usr/local/share/cmake-3.31/Modules/CheckIncludeFile.cmake" + "/usr/local/share/cmake-3.31/Modules/CheckLibraryExists.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/CrayClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU-FindBinUtils.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/LCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/NVHPC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/OrangeC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/TIClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Tasking-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XLClang-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.31/Modules/ExternalProject/shared_internal_commands.cmake" + "/usr/local/share/cmake-3.31/Modules/FetchContent.cmake" + "/usr/local/share/cmake-3.31/Modules/FetchContent/CMakeLists.cmake.in" + "/usr/local/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/local/share/cmake-3.31/Modules/FindPackageMessage.cmake" + "/usr/local/share/cmake-3.31/Modules/FindPython.cmake" + "/usr/local/share/cmake-3.31/Modules/FindPython/Support.cmake" + "/usr/local/share/cmake-3.31/Modules/FindThreads.cmake" + "/usr/local/share/cmake-3.31/Modules/GNUInstallDirs.cmake" + "/usr/local/share/cmake-3.31/Modules/GoogleTest.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeCLinkerInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeCXXLinkerInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeCommonLinkerInformation.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/CheckSourceCompiles.cmake" + "/usr/local/share/cmake-3.31/Modules/Internal/FeatureTesting.cmake" + "/usr/local/share/cmake-3.31/Modules/Linker/GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Linker/GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Linker/GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linker/Linux-GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-Determine-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-GNU-C.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-GNU.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux-Initialize.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/Linux.cmake" + "/usr/local/share/cmake-3.31/Modules/Platform/UnixPaths.cmake" + "/usr/local/share/cmake-3.31/Modules/WriteBasicConfigVersionFile.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.31.6/CMakeSystem.cmake" + "CMakeFiles/3.31.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.31.6/CMakeCXXCompiler.cmake" + "_deps/googletest-subbuild/CMakeLists.txt" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "CMakeFiles/3.31.6/CMakeCCompiler.cmake" + "CMakeFiles/3.31.6/CMakeCCompiler.cmake" + "_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake" + "_deps/googletest-build/googletest/generated/gmock.pc" + "_deps/googletest-build/googletest/generated/gmock_main.pc" + "_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake" + "_deps/googletest-build/googletest/generated/GTestConfigVersion.cmake" + "_deps/googletest-build/googletest/generated/GTestConfig.cmake" + "_deps/googletest-build/googletest/generated/gtest.pc" + "_deps/googletest-build/googletest/generated/gtest_main.pc" + "_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/RingBufferTest.dir/DependInfo.cmake" + "_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake" + "_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake" + "_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake" + "_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake" + ) diff --git a/_codeql_build_dir/CMakeFiles/Makefile2 b/_codeql_build_dir/CMakeFiles/Makefile2 new file mode 100644 index 0000000..77ccb97 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/Makefile2 @@ -0,0 +1,324 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/RingBufferTest.dir/all +all: _deps/googletest-build/all +.PHONY : all + +# The main recursive "codegen" target. +codegen: CMakeFiles/RingBufferTest.dir/codegen +codegen: _deps/googletest-build/codegen +.PHONY : codegen + +# The main recursive "preinstall" target. +preinstall: _deps/googletest-build/preinstall +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/RingBufferTest.dir/clean +clean: _deps/googletest-build/clean +.PHONY : clean + +#============================================================================= +# Directory level rules for directory _deps/googletest-build + +# Recursive "all" directory target. +_deps/googletest-build/all: _deps/googletest-build/googlemock/all +.PHONY : _deps/googletest-build/all + +# Recursive "codegen" directory target. +_deps/googletest-build/codegen: _deps/googletest-build/googlemock/codegen +.PHONY : _deps/googletest-build/codegen + +# Recursive "preinstall" directory target. +_deps/googletest-build/preinstall: _deps/googletest-build/googlemock/preinstall +.PHONY : _deps/googletest-build/preinstall + +# Recursive "clean" directory target. +_deps/googletest-build/clean: _deps/googletest-build/googlemock/clean +.PHONY : _deps/googletest-build/clean + +#============================================================================= +# Directory level rules for directory _deps/googletest-build/googlemock + +# Recursive "all" directory target. +_deps/googletest-build/googlemock/all: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all +_deps/googletest-build/googlemock/all: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all +_deps/googletest-build/googlemock/all: _deps/googletest-build/googletest/all +.PHONY : _deps/googletest-build/googlemock/all + +# Recursive "codegen" directory target. +_deps/googletest-build/googlemock/codegen: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen +_deps/googletest-build/googlemock/codegen: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen +_deps/googletest-build/googlemock/codegen: _deps/googletest-build/googletest/codegen +.PHONY : _deps/googletest-build/googlemock/codegen + +# Recursive "preinstall" directory target. +_deps/googletest-build/googlemock/preinstall: _deps/googletest-build/googletest/preinstall +.PHONY : _deps/googletest-build/googlemock/preinstall + +# Recursive "clean" directory target. +_deps/googletest-build/googlemock/clean: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean +_deps/googletest-build/googlemock/clean: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean +_deps/googletest-build/googlemock/clean: _deps/googletest-build/googletest/clean +.PHONY : _deps/googletest-build/googlemock/clean + +#============================================================================= +# Directory level rules for directory _deps/googletest-build/googletest + +# Recursive "all" directory target. +_deps/googletest-build/googletest/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all +_deps/googletest-build/googletest/all: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all +.PHONY : _deps/googletest-build/googletest/all + +# Recursive "codegen" directory target. +_deps/googletest-build/googletest/codegen: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen +_deps/googletest-build/googletest/codegen: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen +.PHONY : _deps/googletest-build/googletest/codegen + +# Recursive "preinstall" directory target. +_deps/googletest-build/googletest/preinstall: +.PHONY : _deps/googletest-build/googletest/preinstall + +# Recursive "clean" directory target. +_deps/googletest-build/googletest/clean: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean +_deps/googletest-build/googletest/clean: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean +.PHONY : _deps/googletest-build/googletest/clean + +#============================================================================= +# Target rules for target CMakeFiles/RingBufferTest.dir + +# All Build rule for target. +CMakeFiles/RingBufferTest.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all +CMakeFiles/RingBufferTest.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=1,2 "Built target RingBufferTest" +.PHONY : CMakeFiles/RingBufferTest.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/RingBufferTest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 6 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/RingBufferTest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : CMakeFiles/RingBufferTest.dir/rule + +# Convenience name for target. +RingBufferTest: CMakeFiles/RingBufferTest.dir/rule +.PHONY : RingBufferTest + +# codegen rule for target. +CMakeFiles/RingBufferTest.dir/codegen: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=1,2 "Finished codegen for target RingBufferTest" +.PHONY : CMakeFiles/RingBufferTest.dir/codegen + +# clean rule for target. +CMakeFiles/RingBufferTest.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/clean +.PHONY : CMakeFiles/RingBufferTest.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googlemock/CMakeFiles/gmock.dir + +# All Build rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=3,4 "Built target gmock" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 4 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule + +# Convenience name for target. +gmock: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule +.PHONY : gmock + +# codegen rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=3,4 "Finished codegen for target gmock" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen + +# clean rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir + +# All Build rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/all +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=5,6 "Built target gmock_main" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 6 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule + +# Convenience name for target. +gmock_main: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule +.PHONY : gmock_main + +# codegen rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=5,6 "Finished codegen for target gmock_main" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/codegen + +# clean rule for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googletest/CMakeFiles/gtest.dir + +# All Build rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/all: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=7,8 "Built target gtest" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 2 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule + +# Convenience name for target. +gtest: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/rule +.PHONY : gtest + +# codegen rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=7,8 "Finished codegen for target gtest" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen + +# clean rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean + +#============================================================================= +# Target rules for target _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir + +# All Build rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/all + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=9,10 "Built target gtest_main" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + +# Build rule for subdir invocation for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 4 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule + +# Convenience name for target. +gtest_main: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/rule +.PHONY : gtest_main + +# codegen rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=9,10 "Finished codegen for target gtest_main" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen + +# clean rule for target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake new file mode 100644 index 0000000..e316c8a --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake @@ -0,0 +1,24 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp" "CMakeFiles/RingBufferTest.dir/test_main.cpp.o" "gcc" "CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d" + "" "RingBufferTest" "gcc" "CMakeFiles/RingBufferTest.dir/link.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make new file mode 100644 index 0000000..f9c43fa --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/build.make @@ -0,0 +1,121 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# Include any dependencies generated for this target. +include CMakeFiles/RingBufferTest.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/RingBufferTest.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/RingBufferTest.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/RingBufferTest.dir/flags.make + +CMakeFiles/RingBufferTest.dir/codegen: +.PHONY : CMakeFiles/RingBufferTest.dir/codegen + +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: CMakeFiles/RingBufferTest.dir/flags.make +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: CMakeFiles/RingBufferTest.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/RingBufferTest.dir/test_main.cpp.o" + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/RingBufferTest.dir/test_main.cpp.o -MF CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d -o CMakeFiles/RingBufferTest.dir/test_main.cpp.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp + +CMakeFiles/RingBufferTest.dir/test_main.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/RingBufferTest.dir/test_main.cpp.i" + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp > CMakeFiles/RingBufferTest.dir/test_main.cpp.i + +CMakeFiles/RingBufferTest.dir/test_main.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/RingBufferTest.dir/test_main.cpp.s" + /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp -o CMakeFiles/RingBufferTest.dir/test_main.cpp.s + +# Object files for target RingBufferTest +RingBufferTest_OBJECTS = \ +"CMakeFiles/RingBufferTest.dir/test_main.cpp.o" + +# External object files for target RingBufferTest +RingBufferTest_EXTERNAL_OBJECTS = + +RingBufferTest: CMakeFiles/RingBufferTest.dir/test_main.cpp.o +RingBufferTest: CMakeFiles/RingBufferTest.dir/build.make +RingBufferTest: CMakeFiles/RingBufferTest.dir/compiler_depend.ts +RingBufferTest: lib/libgtest.a +RingBufferTest: lib/libgtest_main.a +RingBufferTest: lib/libgtest.a +RingBufferTest: CMakeFiles/RingBufferTest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable RingBufferTest" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/RingBufferTest.dir/link.txt --verbose=$(VERBOSE) + /usr/local/bin/cmake -D TEST_TARGET=RingBufferTest -D TEST_EXECUTABLE=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_FILTER= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=RingBufferTest_TESTS -D CTEST_FILE=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -D TEST_DISCOVERY_EXTRA_ARGS= -D TEST_XML_OUTPUT_DIR= -P /usr/local/share/cmake-3.31/Modules/GoogleTestAddTests.cmake + +# Rule to build all files generated by this target. +CMakeFiles/RingBufferTest.dir/build: RingBufferTest +.PHONY : CMakeFiles/RingBufferTest.dir/build + +CMakeFiles/RingBufferTest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/RingBufferTest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/RingBufferTest.dir/clean + +CMakeFiles/RingBufferTest.dir/depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : CMakeFiles/RingBufferTest.dir/depend + diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake new file mode 100644 index 0000000..12eab4b --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/RingBufferTest.dir/link.d" + "CMakeFiles/RingBufferTest.dir/test_main.cpp.o" + "CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d" + "RingBufferTest" + "RingBufferTest.pdb" + "RingBufferTest[1]_tests.cmake" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/RingBufferTest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make new file mode 100644 index 0000000..1f5f451 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for RingBufferTest. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts new file mode 100644 index 0000000..bbbed4e --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for RingBufferTest. diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make new file mode 100644 index 0000000..145a27e --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for RingBufferTest. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make new file mode 100644 index 0000000..9100aac --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/runner/work/RingBufferCpp/RingBufferCpp -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=gnu++17 + diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d new file mode 100644 index 0000000..16bade7 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.d @@ -0,0 +1,103 @@ +RingBufferTest: \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o \ + /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o \ + CMakeFiles/RingBufferTest.dir/test_main.cpp.o \ + lib/libgtest.a \ + lib/libgtest_main.a \ + lib/libgtest.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/libstdc++.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so \ + /lib/x86_64-linux-gnu/libm.so.6 \ + /lib/x86_64-linux-gnu/libmvec.so.1 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so \ + /lib/x86_64-linux-gnu/libc.so.6 \ + /usr/lib/x86_64-linux-gnu/libc_nonshared.a \ + /lib64/ld-linux-x86-64.so.2 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1 \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a \ + /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o \ + /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o \ + /lib64/ld-linux-x86-64.so.2 + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o: + +/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o: + +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: + +lib/libgtest.a: + +lib/libgtest_main.a: + +lib/libgtest.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/libstdc++.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libm.so: + +/lib/x86_64-linux-gnu/libm.so.6: + +/lib/x86_64-linux-gnu/libmvec.so.1: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libc.so: + +/lib/x86_64-linux-gnu/libc.so.6: + +/usr/lib/x86_64-linux-gnu/libc_nonshared.a: + +/lib64/ld-linux-x86-64.so.2: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc_s.so: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libgcc_s.so.1: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/libgcc.a: + +/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o: + +/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o: + +/lib64/ld-linux-x86-64.so.2: diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt new file mode 100644 index 0000000..cb3b1ef --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/link.txt @@ -0,0 +1 @@ +/home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ -O3 -DNDEBUG -Wl,--dependency-file=CMakeFiles/RingBufferTest.dir/link.d CMakeFiles/RingBufferTest.dir/test_main.cpp.o -o RingBufferTest lib/libgtest.a lib/libgtest_main.a lib/libgtest.a diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..d6f23c6ba180687579684d3590802f50d0b9d3f6 GIT binary patch literal 257552 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 D%E#S1 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d new file mode 100644 index 0000000..582585c --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/RingBufferTest.dir/test_main.cpp.o.d @@ -0,0 +1,293 @@ +CMakeFiles/RingBufferTest.dir/test_main.cpp.o: \ + /home/runner/work/RingBufferCpp/RingBufferCpp/test_main.cpp \ + /usr/include/stdc-predef.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /usr/include/c++/13/cstddef \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /usr/include/c++/13/limits /usr/include/c++/13/memory \ + /usr/include/c++/13/bits/memoryfwd.h \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h /usr/include/c++/13/new \ + /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/move.h /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/stl_tempbuf.h \ + /usr/include/c++/13/bits/stl_construct.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/bits/ptr_traits.h /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/bits/shared_ptr.h /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/c++/13/bits/stringfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/13/bits/shared_ptr_base.h /usr/include/c++/13/typeinfo \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/bits/refwrap.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/exception \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/ostream \ + /usr/include/c++/13/ios /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/c++/13/bits/ios_base.h \ + /usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \ + /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/memory_resource.h \ + /usr/include/c++/13/bits/uses_allocator_args.h \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/vector \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/c++/13/stdlib.h /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ + /usr/include/c++/13/cstdint /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/iostream /usr/include/c++/13/istream \ + /usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/unistd-decl.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h \ + /usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert /usr/include/assert.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/RingBuffer.hpp \ + /usr/include/c++/13/algorithm \ + /usr/include/c++/13/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13/cstring diff --git a/_codeql_build_dir/CMakeFiles/TargetDirectories.txt b/_codeql_build_dir/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..82bb447 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,33 @@ +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/RingBufferTest.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles/install/strip.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/CMakeFiles/install/strip.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/install/strip.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/test.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/edit_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/rebuild_cache.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/list_install_components.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/install.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/install/local.dir +/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/install/strip.dir diff --git a/_codeql_build_dir/CMakeFiles/cmake.check_cache b/_codeql_build_dir/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/_codeql_build_dir/CMakeFiles/progress.marks b/_codeql_build_dir/CMakeFiles/progress.marks new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/_codeql_build_dir/CMakeFiles/progress.marks @@ -0,0 +1 @@ +10 diff --git a/_codeql_build_dir/CTestTestfile.cmake b/_codeql_build_dir/CTestTestfile.cmake new file mode 100644 index 0000000..69fafa6 --- /dev/null +++ b/_codeql_build_dir/CTestTestfile.cmake @@ -0,0 +1,8 @@ +# CMake generated Testfile for +# Source directory: /home/runner/work/RingBufferCpp/RingBufferCpp +# Build directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +include("/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_include.cmake") +subdirs("_deps/googletest-build") diff --git a/_codeql_build_dir/Makefile b/_codeql_build_dir/Makefile new file mode 100644 index 0000000..594c166 --- /dev/null +++ b/_codeql_build_dir/Makefile @@ -0,0 +1,300 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/local/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named RingBufferTest + +# Build rule for target. +RingBufferTest: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 RingBufferTest +.PHONY : RingBufferTest + +# fast build rule for target. +RingBufferTest/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/build +.PHONY : RingBufferTest/fast + +#============================================================================= +# Target rules for targets named gmock + +# Build rule for target. +gmock: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gmock +.PHONY : gmock + +# fast build rule for target. +gmock/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build +.PHONY : gmock/fast + +#============================================================================= +# Target rules for targets named gmock_main + +# Build rule for target. +gmock_main: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gmock_main +.PHONY : gmock_main + +# fast build rule for target. +gmock_main/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build +.PHONY : gmock_main/fast + +#============================================================================= +# Target rules for targets named gtest + +# Build rule for target. +gtest: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gtest +.PHONY : gtest + +# fast build rule for target. +gtest/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build +.PHONY : gtest/fast + +#============================================================================= +# Target rules for targets named gtest_main + +# Build rule for target. +gtest_main: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 gtest_main +.PHONY : gtest_main + +# fast build rule for target. +gtest_main/fast: + $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build +.PHONY : gtest_main/fast + +test_main.o: test_main.cpp.o +.PHONY : test_main.o + +# target to build an object file +test_main.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/test_main.cpp.o +.PHONY : test_main.cpp.o + +test_main.i: test_main.cpp.i +.PHONY : test_main.i + +# target to preprocess a source file +test_main.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/test_main.cpp.i +.PHONY : test_main.cpp.i + +test_main.s: test_main.cpp.s +.PHONY : test_main.s + +# target to generate assembly for a file +test_main.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/RingBufferTest.dir/build.make CMakeFiles/RingBufferTest.dir/test_main.cpp.s +.PHONY : test_main.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... RingBufferTest" + @echo "... gmock" + @echo "... gmock_main" + @echo "... gtest" + @echo "... gtest_main" + @echo "... test_main.o" + @echo "... test_main.i" + @echo "... test_main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/_codeql_build_dir/RingBufferTest b/_codeql_build_dir/RingBufferTest new file mode 100755 index 0000000000000000000000000000000000000000..288635473cd3a0c815dc34682580e374fe7ec5a8 GIT binary patch literal 622856 zcmdqKd0>=9^7#F52SqZXvRQR;#GvuQ375fx9Zn|_+z}9?qM4AxL_;zr69}GJ4o!^c zcwuxsB3|*1C>RegqG-HFbTJ+)5fwT{NW_D9=2z8SJx@=~JgobD|9hj%)Af0(tE;-J z`#CeYYI@d;zJ2=iv*@RvHOcA&WzR_bv@Eauw5-;u!Bj$)VeJQ>hg)uIAkhBs&r5sx zwym$)p|?q-hYe!A6l$4o4<$XlRo+~IMpZ?O&hne%lh|NqjSpXybuQT@rczqzG(OK)|1 zXF@&IBWnMD`=nvFW>b4kQUNB+Y2_^Z*mlT&)RvllJG2!?L<3?AM zjUFQ_pkHqIhf$n%##t5&OA9jUMyqeNlC?eDcOdOY{TG*hnDgZwCncZw+p|yJ-#fJ? z?PGB;>Y(3P2X*iV?a`1&<>!gX%&2x{dHM_(Xq6mpS^Et+8uz^f|6YNAX@9%!&`80% z3xB()`iQ2T`Ey4t95S{1#epYf?5;aB>-D!I7vK8K@s~c+|GT>n4K|mr$U0=`&p*9? zQ2mgpP}TA0J#cVXg1yfGOvH}?Clm26_DRgIJs>fE9y%eBohOGR=F=VgxePivk(~|) z{m}l2_18Pt`Im$L!}m*U$M0a@w{K$oJO}-|9r#y}Oo`(C5*C0&{2mAWP6zvy4&yS; zp&u4I@Ct`KdE8-KUUSeda`5v*2Rro+`fDBhoCgy!QNJAvhsQ+xCx?D6bFhE5gFh!b zjLSI=e5->$+Z_5~qJy8~9Q--bf&byqKc_mx`J2e_Z;{{hq%6W@aH6l`Sk=W z=!wR07UUa*9QSjw!#dEJoY>AYU?GwHe>kkG`3`)RL%h2k)|o>b`ac2()kOZRcUYhM zIoNsD!Owji^e=PBpBWDQv!6q}Ne*_VIpqI04t`$YVEQe{%Pdeyd z;oxU~hrC+j;LiyT^DEoIPLacS-RR)I+ks!_us$E>(4Wg4+MVwZ*9M3FS?kcBMGpDA z(}8buuz#t;{7Q1rAK2z3chdShKjng{jpx@yz zUz!~H;YJ5Pk8n5+dK~Or;lO`zSkKEG#_?W<_38}={qG(4XAW^4;Na)W4tW@Huz$A0 zIxx~fe~81lf9}xFk2{R}jSlBCIS&3WcF6NChx3*x4*nnPVBhC3UygOqf72nZ9~{=n z$qvVntqyr!?Xb=abnxd|$WI74?g!Gxa>r52`qjbzQipuI-yz@5cgXW)4t}n1u>Yt- z9=`98Cx5#DhGeLi3f^j*{LEq~zzZN;f zyUwAXKXZty&0+n2+@YU64*C2Q={J9(2O%(4gP&?d8vD|xLVS%42 z`Dt0F!f^_DJ@IPde+PqTzh!@A--R6vKd-_#qJI02%8px7%eofYMg0cS*Zv#>d4>8Z zbbnIop9R&CXArL@J2w)yep2@R#QzE7g8F{qT0aT+NVp3YxE>ZL_)*@%eM`t6)Q>Pb zi(tN^pVicFIxZ_G=fZ_$r8yO$-11OPj+K)+cUDe*L3zQ2#TB7~^0~97mXwti%*|a; zQlR!F-gE95b3!NPgt&n*sBWGsOhKCWVMZgBeSIpZKktUsZoEHAgDU|PCtdQPaMA~U`!=!eqB zs&L96o`T$knR#<_rq3CllLuzzgvNlsp`!A##W^Jfr5A>Zatg}J%gX&Taqs`Z$%)V- z5Nz>@YTvm~pz|i#Z zc_jt8<u>z?Lyrt3Hna8lRmb*vNTk@ut0Uqv@x>3!GR2D zItR=Y5Sk19Ke3=HuOJvIE-RIl%P^AS(u#ueP-e+=7>u&HIC}Xd{zVuS7@3dw&bIK*<^PGj=K^7%1i7iRA^*Ns9`mL$|>E$<4X2GPgWGCpYhs z%Hnbyv@__96 zd>$?{uv}#1m*p%j&MzpPE@v|AVtG7naZzqar}F>WgA;P2vlGTfPN?zG?t?YPDGX4K z>5t;lyz+vD1*IW}Zc<7AXF7|U>;6x9rH&0|s{3ayiXGzrb*#n}7Q;F!SJBd3z3QlAhgufoe3QojIhHYpuykxK z{_q8Z2s_kqV?i#=(-JTU>#{V30JE?-Ki(c5ZYmNT5mik%XqV>X<%aT#uqqzUVi#X! z&={EiwR6q2WkFea2n@nPmj?$uaz0pDUXZh>xI9#uTLL>_AejqO$KWvucfp*Bj>Vr( zkg>49$Y}?bCzyShms=6iU8q*S@&Y)7RjAd^KH7i-bOg-EffJojZgENa_?#>_+sTP8 zFX`!U+<~)|(u%@@^67q9ZRVuIY9phUV+BXToY+HE^fX~_%h0$oI4EQM*e&v~`VRmL zVO3Lo6?-%b73AhGVMjAqG1K*NGY1~Mmgkl)ft9mZhJImHRZg&=yrQf$x1>0xInVzs9PG`7m3ZoIADqoW z`Jave3Hs(w_G;X<9v(KJTQDf|K=3Ec=|w0{E<$EJf6_n(bW1@w937xn_S&(I>tMn( zg;W0M@i%4^^9%m#ncAFCdBRIEH7ks31~^p73sG7WPt2L^+yQW&4%e!4Vd~=C1(zo3 zoGdB35Y~_XZxgv5~y8g+U9iUoC7d zH$NYA3d^wBXjwN>QBYE7!38)RD)A~5oXD>XT7`L~p%N6z;d;|rSXsI-7oc4GEpTOF z*`flg5D)Ga_R*HIFp-?W%%D(oL7NJw+yqipb7$nU1dwG zg%_jma08^!2q?C1O3(rt0uRT?K7><7Z4F|p2o~fO7Z&G1d-*uk7G8{($HAzIY7j4$ zt>TK@PzbvduN`5ns49k;DL=tJ9AgUdpk7W+tS``)Fe=#5#T6AnIQ<6=I3>XwKX@-` zVQ#S<9FCn@)X`~ev7o8|PJ7`J2Kx`Z#Pi6)eA$n1!B&a}(IGekhZ7pe4Ri+jA5sa@ z0wOFZUBsfn;}?zy`dcV3`cSHX5z!q3r84F67Ux@q@)SeH zgN{}d6kH6(z-Vb%4yKOGz2b_h{Nf8S9?UlEHXOX-pzMcI6ri`E*Yb`%7T>pB2l12$a&1=P7>L)TudRM|-T(vNESk%^5R#%;@o|oShAP+~~1mV#G0|Nqf`Nt*P1B zlc!|nq>mmudSa|96DP#%ooG~y*)b+PMof=&Cq2ff(gd%^W<-nQqNTB8qs4Tao*0E= zZ3vOV9n-$>&R~D|uOGadI8c@c$dzobYMe3p*j90a(yibDtN=H-OB6^{sLQ5$1k#Zl{Zh>bF@K`}U&+s3)1n#*1 z#o7f7e{lcX#{SBKi{S~=e%4RX{X?wvv_As+Q+jTLJK@8vzVI?B+6+qhAZve;bESNM zK@?WI>zSc)1KO^@Kvc4c$^=CiXpV(iazheLPwZ4V@_@m#;*3UOw zN2muQY4pCf=HU^Fdl+vZp22v8-k^-l)l)-TErFXL{q z<72#=xS#QAvL9gFL-vapcafbS-0ND>SZjt?Z#$9B;f${dsRl7}$ zhsl03<1VRko_XY{baw2@oKVP z&3FUZuVFk$_QQ-@WWRy&CbHkic$n-rFpvR}=(o9u@fkC6R(#yw=ef$?^--^h5R zO7%}O<1KyF8xbvxTQ{orC0ZHx-=ugO<85T8opIM)N?$N;-K}^x=Z`Di!+84|#go2` z%{Qwby??@ZfZ9!AyotD*af{kbV_dhJ!FUR_>t)=(O8Mzyyqmb6anDmqKbvuj;w@s_ zOYH_3Zy@_sjC*fW_Ny7!?ba}^+pT9jo7!z)JW#LfH!|LEyW&lZS3jwEGvody#akJ# zrgkHYyQtkZ#=EKAcE)wPf^pq$599UJuC+5Z--tx4vU&OfQ8O4K)S3jb772~eQ6t7|2 zPwj>oZy@{ij0foVY8x1LH!J&%jJuvwyoqt|4T?82?kC>Dcz}2-<1NoCI}yg4UR1n| zasNAtw=>?bL2BvrzlZS%>07&E^R}IM665Yo%8rY1&pO4^7%!sn@-W`8 zO&wn{IB%!pGUL^2756!CKjWSc;YC6C$!6S5$H5}TtI5wG;|;Hc#UN8I0?Ay^QO4 zeT?gP{fz5)vl-X%1{gn=;wobNV&Xx@-@8JMOBLff-fG5wuU7gsjO%#AjO%``XFQMm zX<%IY-^jT3zlm|}e>3CS{}#r-r*>Nz*KtJ{*KxHmuHzDnH}+S@wQk0}->Z4o!+7-% zid)^WdD}2qaTnu)?58l^9#-q8oAGKoe@^3klCqz{xJB!Xm+@}0?_)ej_Wg_p*1>I9 z_z5uXBmavS55J-GgPgyqcs1iqQMKF1`N4`eG43Ke z&5T=g9Bg6SA69l+8E+x`5yo9lDg8FayKh#!opBenD;W3U?RWU;X54*<;ys*GT-JB7 z`5CTP`bms?NI!+~RvIri<6#=FG|p+fJdAtEeg@-y;$FrB#C?nhiTfGXLHR%T! z4-+q9T#r|faqnHK->Mkb<5kUg1KF=(yoq?2@fPCsj0f&k?KUtTA^j%C+iAR-8Mj*0 zc|{B39y-ryWjy$-(vL9ie^K!^#v`QP&baG&r7su{H!I%FxQBQTiFgy^EySA{j}UKR zyq$O}#;@e+J_&^3%(>hq#aN@Lj51KjRJLe>UUV{{Z9K|02e<|5c3l(EYk<#)CQ!84u_@ zWW1?V`QN~}oARxZaf_}~ni%&GZ)UuDoyzl8#_Os7Ba8>g|2D>3$p3cENxz$OvfsnF zpY$#IJyHGqC_?s=81E+i6vo@gzMFB+EowbUW86#Yc?RR%WXH>R6SeDO+(Ui_IKP?J zF~+O!R6NMIm+V(D9;W-c)r<$pehuT@|5EnDjC;s_J>%Mb1LI9(zmf3(*>7UpP4=4^ z*Y;Z&?wvcJ zV%(}z{-iLj?WZyBC4CR$+P;_Z2GaL2uI*cG7QTT-$GE+`Ury)55s6A7Q+j^xGKM_66fDq~FcBwr|mU8G78^*DHUL7}xew z7!Q!Xn{jR5!+1OCXE3hq`xtlMp#1SOuI&dHuO|H>#0gnsIGE%(y$O{HbSL z+izq%K>AILYx^yXw~&4-A2s+cs0FOWBtyqr-&ypuCFUy z4m^eN@H}c84r`6EsQr2Z)IHj8FAokj7N@A zezr5N{p@DEhWzYd+)Msgf5hfzfOrz)+E14QPhmWquKaW}uKn~d-b{XGFy6gL+3_;& zB0qhMYd`%CJezS(uCgCsT>BYhTe6;ejfpP6;6XPj# zUee6CpZsZIJV?BiaqVZsfwwUp$y0u|Gp_yYX52@9_AqXdKUQySe!7V#F|Pe|Iq($5 z-SqnxZq8|4@-SXSer7P2#Y zjB7vr4m_LjrW2K)0mikTLB@;7&nm{<II?csBXj%y^jmY+<~Kcq`-D&xiwWW88a^^0S?B?PoXR zHRNXx<6iQ|qTdhD>tuj<664xWmjh2>Jn(nrr<-x@r-$)o@-u_+Zu-3mFXJxq)5o~> z)9=8u84sSR{0uOz{j6rZZdRsApJDP8;E-t zcaiL6JVN?@#@mSp7`Gl(eikuaLwQogxSRBA821tnGae+lfpgMtV!VNPGvh9jTN!UB z{WiwkkEyuY8E+xEoAChY_b{&8O``V&^!PTAzKe0K?`FK6^gWEbA6I^Q84nQmF`h

kNo%E|2*ZN_`-A&5>2F9z2H!@yBax>%BQ_4;&;{oCk#+yiP zXS{{<1>;q;j`c9^roUHb4T?Q)*ZMBT^?I1Xcssp^;AY&S=j<7b>+!8(T+h2OJ8soZM597Ms490c4 zN$mU7wVc9uHmw_O#`QP`DKGG>@KyMS-z9=SMF!spvgUf-Lj4H_*ZIPEgJH+i*XJW# zU*`qq`h0V>JQHK`p0>_gT6j~a{UxqS2@?mE6(+Lz`35^oa^U5$QK*^ zufKnVbNw8Ka~IuL=3GAy;oR$>ub)eB{h))sem=nU8yxiYeR{4RanRTI%elTq_y0K8 z_pLeiIOyy9$6P<)ps(-aa{aJ_zP_Kz^;;bD^?gmQ-|e8U?=NzFH{CDcT;J#8-0z^T z@3(RNY6pFN-;3)vIq2*APh7v-f^&1@Y z^?d@aA92vv>pItOG1g&o-LU99i|czGc(ns>ao{};+->+>4UvmNXN9eBM1 zZ*kyl4!qle*Bg2MEF2&8Pn*H-0jSSsQjGjGdA0+uci?Gseu({3ts8}{-{4OfJllZ> z9C(ofZ*brd2j1quQ|LSs{WtxLB&+KJd@A~a;eVUKPcV49!A~)`FnEK(yA9rC@E(J& zF}RD)W6{ss4W4H3Ck)A&i&7@qAeS=)cc{`mbpSTm5&6 zkiTef{dbCxuQzxKy%&T0WrJrJ9M8A)kN&$!sE>aGTmR_43xxc24PmSQt`YJUgX_PK zgnWa+tM*aji=Wu1`ls69>Nh6To*ILz-xN?hY;g4kxZ?E&$F}uPgTd7kceSU{;L0<_ zn+&e6wQx_f!Ql%KqdzSMhd&(^{b@Bge1T;2Ct`5;6K2t$HiN?#I7WZk4Gw>*Df%M} z4u3)}`qOQ2z4qYF9)rW5%Cdj8)=nsT4Z;Pe%clBXE_pr{qdTZ0cb zc$&fgVsMYaQw*MA@V^?|Yw&{&?lbry2KO8MP=jY1{BH&i7<`1miwu64!Gi{O8@$Tk zha0@w;3ExQWAGyk9yWNY!Rrk^%HRzKKhofh20zN+O$JXhc(cKeHh7D{k1=?w!H+d~ z#NhZh=k!mT!H?Gvw(SNVZE#_5kHNbQo^J3SgO4$|HN?*Uu?9~v_&9^R3_jlADF#2$ z;BJFw7(C736AkV$_(=xOF!;#^_Zs|EgZm6V$>4s2|J~r(2KO2~VDQNXFEaQPg9i;h z)!R~y`G@cRtzGx+@m_Z$2HgJ&E3L4yYj{*b|o z4Blw)purzDc$L8)F?hAXA2oQ5!5=et*x-*Fyx!nX8oa^aPaC|^;LjMm$>3`Z-fZx7 z25&KVv%y;p{+z-8|5p4ydBiWiW#1IQsq)j-R)q9xR~H{x6NYSJq*)ZXz^E*)s~ zj+zFa$%lC@)R)KSj%~fYy@g>Z_W{+8&9>YZ<&C!759Kws+#luDwmbmkn{0U?%1dn- zCwE7=EhnM8z?KK2JlmG{L3xTT?~C#nTONY)NL$_y9*@_{I?w&jCRzR8w{qrB9X@diUjxh+}D=z20_Q}-=p!nQQl_DhoijNmPewz(Uy-ud5tZn zqP*IcN1=R^Egy;UQd>R><#Jn2LwSKMAC2;CTRsNmDYkqp%42N#IFv`)^6@ASv*pn! z_qF8{P~QDpG=98b@7QL`=_qfu#YdG{~T`0)a_W1B6XiSlM!o{jQGTb_gR8e5)=@@iW?3+0<^ zc^=A3Z5c0AJIZZ28|4MId=AR9ZTVc3r`Ym&D37t_`6!RHYMWxN3E*u5tje>KY6Z26xkZ?@&7C~vgoWhk$)<>e@^w&fKl-(<^IqrB9XuR*!o zmTOR6V9T{A&$i`jQJ!MUbtsRq|%ByYp0hDjD z$)!v# zWby?}p2y@fm^_2YlbAe#$)lNkB$G!lc{r1YGI=1A|0s=(|0gEzV)Aw-f6nABOn#Ti zuQ7Q8lh-l%2_`?tc>$E@g5dlP_TMJSLyPSkBiy(GkF)2w=?;3CU0T#yG(wK$s3rwj>%6j`9UV% z&E!=~zMjcfGxq$$pVhX?|QKX@3;iKh;o8k5iTQe}VgI;zzi+7TxfH{wEoge#18F%%G+H zO;8C{|08#+RCqs5RocG;?ca*_!(_kFsB~vsC27Ba>|bH1UJ|D&?Vp79$D@4@+4mWh zPKm1|?GGUPe=}6~k5iTQKYQiy5(*C7r zzY^^S$$pJd>GHTr(*NmX|9nIB%s5qP|6sI#5ZZT<{WPP}p>dU@{jV_v!2jQ|iq3yo zHba&6p9fX37B0?36MR4=Uu~xt0AEw#tGhfk$+x06G|*Q!sMnw5TX}hEig@ea7VMdp znr5#UN!U^ankfYfS+#q_YbUGfX{>sNxQ?n9vFhWn`Uy}yOdc#F6Y(BoI(YCMjKBC6 zuF}cEWJe2w94tJE79O!J^um{5B<_VxAI9~zY!v}HQAT1Q4 zgllT}f)T@8V4< zS$%}BF2h$Bboq|{1G8~}IQn~tY~}PmnajTIv#h;ORxMQW)lN&z?tBT`*~hV+$Y#sx zT!qQcvv(0r&r86r&fZNKPF+?9MiR}Rv1np6x~7J0nWKfwI19-u@D3@C`%ZfbPjNJm z6lb9FA6VI(|BjX4dOyy8nYCL6LM#aEfGYg!hUa$vL(&PdFL~#TihM z9BNm-#If>;@s(vHTXFt;(hVQ~#*YYmP$Z)qZFRoq9LWv#jQ$F~2QKlTJ`!g@MKas2 z{E%bih4GbTBnM$6E(~H{{1|9Qa-O5D!{cn(W3tJfXa_qQXouC5O;tHhYV6AY8Rygu z_r+J1k<5h3Vn!EyOvaB>;Dg5GMn_v`ldUTIpec_wz4j!V>sa~V_{!3ejW|u$?}CqJ z_#hwlb2Rh8JE}7bA2OkmxXkt;GS;axR>f6LUU4HWStp?%<82qNb+qD-v!aeyJvdFj z-x&?U=V)Q5gN1cy;VG~n9<$B#aWwP#+dMJs%(~cKE?UMo^~cq51}aa-&Kzx5UglUi zGrsaLto$9$jBme%j~)224L)d8Pjs~P`&&E`)uj)htp?k|kMK3GiKqJuaTbzS;PWu_ zD94_r&o~;mG|oV!Ozx3(<;9MbPmQlEllyC&TkW0j@hN_6fe-47V;yaM_a^TPdsJ_= zr|CByr>K+fQ)ngU1q9mXVwZl||M!@NpV`Oo0y?liM84oiEMB zoN&pBGQeIh&ULKpj;}1wPFr!JztRC88{mU{IKa`&$E_+a_(|VC(ahzxh4Te!i|!dVU$e#e>KBjDqRuX}sf_k)R-Rd;`C6^uQc2PZFw9sr;2Obr6S z^IhM?zrrc;96^1^mAY@wkG|Slq+;ib@-4pFSHuWh0pK#wC0>OJcxCsZ z%r3Yv6l*BYL~Nenvtyk5dFa{oUl~rdDW^hLp+gZ6@Yw3oUitdGE>4K?3iZh=)b4x% zlQO2Y$`eEhrqWT+jIVBfsylPyf09?ENYhL;dHFEF;+-9+$@WzWF$&D+ppS+r){z1? z$0##?K2D8mHoKTD5-+`mLBNHFukH#cRNB`Vo3=ysWt&nmC+@7=hCS%s;DL@2j|0zI z`An)CoRM$r=|-Qy*$32`-9oJ1BUI9ogfEe!JO8bx>Ft>?1sKnq20F zJs!QsBlirKdrpQOF4|GyI?vbpTF38S_V%9l3Qqi|Wq3Qpqp+3fW{>=V=ywGyLYTlw zq82ndKNJhVCRV&uR_v1fgBAHQdJ?W)<3TyRAp#zd)H~Fm0+8-y+&8+?KESYi3zJ*S! zQ_m1&_v4!LHG1(doJY@EvC~&~N@{4DZ`tcE-^%f)!k=Li{x7g^cA-weAe=NAuqW?@ z{uU~UF}SzxxKv<$*7dhCS6<-~BY<@dBO80xf{h_a+Olf5qm{#=R_=Y7tb7ZJBHP$1 z&V&m+@FR3mCPWBh0ugqOrffjx%;h~c`Cw{o6*p1h+erzzaRoFFFSmn2+j-|to3ee&W8bz!oOzXL8#mK9t*D z@iw*rogrS41)R^%VX1cOh8|49Z?|H-Jz_Z}Uy`^(D#j$A^c&~DI3L?iUe|wA5Gp6{ zi>2ylNipo(d9sNvF&eGHZDyC4CauCrsLNa-rQyM7xW61%SiheHF`>FZ9uK(Knt9}+urX=Jq-F)s!?Uz9gCh`hc%x46g%O2-^9+)P^`J^ z6}Pw3m(RC1sf|XVQL&LOH*OeoQ%I-lI&Ynm12d|cuMsINBu7G0d%%_7t$X* z$*K*3?HfTEC*H^CrflOqSwhQWx#fIk%S+I52rSEIpMz3EB>UZRhd78fwe& zk2aMbZ7Qy}&T(#PC^j`1n%YZm9ZYTYg%;%aOV1LHf7hPGz4Z{Jj#&K()~DXuBsH>x9*J^j+=+8qGh7?$z#CafKE`JZ2;sP1-4lxjn;GrH4vHDPtgToK4FJYbMrL`Sm zGx*f`rd5;YUsoPkcml9MLpLuD*wh}p8V zJQXg5j8#|G`3u$=hIQgk(D)&(6S_cbZ^KUM5`Rdaz6x!zPc=H<#2sJLj`hZlr*OyH zwBvqbM?D^xZqBS52xEjNO*MG-vdmWK2=yimJ&A?xN7rV8YuIafGMt!mrP@whD^JHA zFj&SB?yoq&!=N@c{HfhA^!jff$y^WzVlB`bLbYSN1Io8Pjtdf)><% zL2GYLpoO*XK&@L*3+p_FT0rk7ZDW*VfF-DXq1L_n8n zk%C$WD4V_F7-@5d7)jdPgKr=M#Ml2;eSjx*KSNDie7}P&9)(2A1p5nS%{r(9(PhCv zyTu!z*ZHnk4JI(+=Vdiq`kJJnJxc37!b#$G)W17g{aO@nK&#cL0?}7V)#dVLj?n>V z{8V%{L$=f<{G{)LE$;Nn?H-Xq_3L9CKM0%nT@LY9409N0bw)%dD54ipZXHki#UIi+Z(j>ZCD#3X) zyQYdA*{xy{R+^}Mf%qLvr=ZpW+T&vqYITX-kPl+#2iSF8VgM-NZ2lc;VF+hMWSIRi z%tztgF}wasG*wrly}Q63^k$cM1`Q<$`*PG;j9S>6yWW${9N4e&d@)Vkq86VhHl$zZ zTh`18=-J7b#!&TXrRM4vl6UirtcJ7dE^#2XlML;Mec*!`f|&>L!+49Gu#}-t5N$LK zz5fa7U`FkVuPe{l*J0h8@ow~EU;s5!(ZDIG{VIc}O5s5LgPJlrRUTCSg4TvfA9sjrRUJ8%+vQ#J_MIbbX7TX|WMsC@!ct4mCl1a@UhH+qE^dLIu^ z^>7a`#*;2_5PISQPw+sNCiV9Sx7@<C65?Fr4-SZN?y@} zLm5s@Xh?*XTWG5x<)+zR6?!ZlRrH?~Fb2C#x;MYUe{Wc{UQlTF?h2RNE~U zP$^Ah%hK}HwwUu9IRpQOMpD2CW{C&%I^V{;ITB0FXzx(6k|c&v$<4yyllo1_3pt0GBeei)FR34%INf#TMu+Z0tk(eh54Z)^;|~^Tu@v{rTjf#QrQr!&k^rNaW9b z4%KF2wHg0sf2zdk(lEcbbTkfR7vu(>*~i@Oz?&DF?3)+Qi#H$>`1wC{VU_5H-xHT9 z7_$z^n-8~2%RAAszM<6lrnoAxr3~?)v=qP6p8;k>rcI^Hr1C*6(Oe@cCN^E5cS~(T1pjUID3OM5vb%Wr^-O9_n zVks1GLY{w>d6P9SnYf;-uZD#pdc)IZFHnH;nZu_VthhnRSyg>lWE3*yp|ibs$Sq?6r6r`m_yn#eQHY z`knwBqtN*d**QJV?+FYL!=Zo0yunNwZj zLTEs0byUExVC92gcP1W$@wo66t>>S?{CvR&X(<-L#Prp@;Dxer;K-_bGy@2(`r{_o zU6Hn;w+il#$S#IE?klIOcR^sqgD3Xz`p9>X4)QG~TqwQ*0W9`_uZBf%C9C#p@jASv zh0VcE(fKtlsxP>(d_ymEP~D^5*iUu$;eEJS6Tb}|gcnVQk<4YUCUtIyI;h~Qdm5f+ zSZW3*uXq5uL@zX`Jx$R)l~+LBFp4m@7WBjQWsf-ct$xr7 zp1(xoxbgLFtEh+U6gNY_IJo<6kf{mDuuAVrdDKHUw}apd0T3f>v*R6P<{;kUbRh}WZdK;tqIVzBiMN9L%l?n4AeZ`Y zArZt5uo{+apzVpWjV_UnZ9tnxLj-91Wtm*Fpxslqr{kgEpywO#e)tCP%@Skf-c#R( zJ>n>6OsobMFee|uj==tc&YM;Hhqyy_OqaMxZegMOL0khxZ0Rbw-3kk(2w@RwrHG5D zv{X&zXr!M+e(_l(5D{7dxicfKQ z0AJ>)+G+hNPZSTs4P~^v6?z8uov8L5*AJ%-v!q^py;UwUe3$I;OJSF&dTYL+O*e9>Zt!%Lwi*oFq zpb}jF$Wp=K*oyER}51Ah~-?B5nyg5&kG zP{0~b%5ATB2)3O!qVio*1s9K-WeJq8l}dZWQn~FFm%_HAxK|lph{Aj+Y!xlf$^3vj zVxz=xxW_$t0}P)$4VwXK)0h7Q$CNah3?WES%&p^K4|YcE)j^l|0Wv^zfl~UX*bM_f zZTY96cVvBZeH`rS+%P@;r_Os+a9?7$V8{jP@_jAwK6WL%%?cBHhj>->Mpo@k@f>nU zo~Pt?k9b(_+A8kFElih~q)T1_kICdRvmlzMRk9-7|BzdmWd+hkmpET;w~DiH%WYMb zq9+GO?RcaT9O+^8QZA2>WInpwCH4maD-4#~UeQNx_lTb%bd1?0`v*sDha}8%c$@1< zn6S7qJ_N}lui!SI;>rPo24Q~oPsOVScwrf4tbE^Ohd2XnSzssfTPB5IK;(io%!f3``@4)dNZQKkta3VblN|ZG%7<0|Ee=;z#YEZS z4v`yQPd>cF{FdisXe6r{>b@_&h7EdgJk&vNe?(iciFye7vL3Su_K$}?kdJ%z5!d0Z z<_DlY)0f@367)rlG!DNXB)bHj56bNx5tfbMM7vs+mZ!$9z8-9GCVHC$`HjNe&tfxN z4<4j+i6gM35zvzOt88wExbYeAaeX!{o_HeuHQYyr2=NRgh5T^I?GBLy+YNZaiA|g= zn=pUt{V?p9S7pAKSU$da9I$AFD&ju)zy8f3bG@XqvBO)8?V&96t_qxyTo;J z3-3qDYU>++1+}U;6BnUplfeYKa*m-oOIGg{(~&95C#l^HXlb#!MkJ_yd@%OBwG_u^|5-hexx>wSMfy)76>-Fgp}-&ExkEN@U{HX2kQ5TH1C1Zd`Y+MzwsUCR@x_WiPgpCCf%D zp*uv1j9`cGz&?2*4dx=hgYsbjpa&<*Yay|}ly-<;;hypIWS6i?aLeF2*krNM3O#?CZb})xavMnIf)}C1_w7A(vP}r3_IU@Nz`Y%swFS}(4 z?Cc=q691u6hWLO=UhxK%eBvc2;nMM}-0l!h$}OD#l7>gzMWqyRGnPQN4z?ZF!R$og zN(o`b`BGGnW|}CbQi{ltC2(jSA(zOKrMMhz{0*$0jaDJ2-D2K@{j82JfMFwlg(@8% zf`D^+2-a6~x(^vm6MNQRMQCT2EZ`C9D=NYGL#g8^Ssi{K8hS3XZU%g3#6jo6MG3yl z>-E*n?eE3kW`OfNv;wDC1L1^Fe&d9%c6qA2%`x|J)m7I?yZl1&aBxYS2}vm~2R-pR zw9>KU)xKbVhj`>M7_3*t*r!x9Go^u;6PeLi`vA=C*xQkCJkPMtA>>gL^IM1}`1le& zrSaQAFpBI{-CV8M_fZTu9DjwVlgU#?K0fTGw}i{C5iK7DXyJ;shvZqopDl)+BpgY zjN&l4?Gk^H+Z`eqm7twLxRvev4!wY-B=Nm0v34pKU<}PFXGBD*P*1%A0=Dr&)WTDe z><|wlfmZI7a+kPWYH-U}q2&v}vN-2S`S7Lks;rfx?s8*N?GT$Dm6v|U;rmF3zzuCY z35w}yb@4s|>;Dz%iv#f^89vbLQ3+d=>;AWpK4Qlc@Uaa(KpBs2d!Sxtjs56C{_O+o zmNfAhnuL-^Y^G9%Xq6@YtWll+q4^rHjLSlU)Qdk~E<&X|P=fOdv|NRH;C2wUm?lMJ zKjy-*@*M2b;P5Bz$1m$pS6=&~)f9D)6CZs9#c8YYT%29cRbGN^ zeg;OwM=D?3%Eh_B_gOYE1h<`^8J)mZbLhv78F3l1RZhM5}QOtKIVkEps)~i`KTc;Y!h9CBw@(?Fj{o)-0vVWVxP=lCF5~` zyzBD;CLR11Q-&POFU1is13O%)(wJDlE2G^>&T)6;cbO$?YEjc zE`toge5>yMZ;{D4`7;c+_yKwk>ty}8I-9Ug3)M-1I@ptu1bq>E%_!Te#k$L7-7aw_ z)&V8sGFU3*qf!ni$>08}hE7l3SER$;Y~Qk9`Xw)K0C3fTQ0|kwybmt*%YNybynGat z#JLZG5`3GJ2h!%q5ZsXd3Hxa!J~*k}CHq=@)X^8N?cn$QpmA|2WJ$*jV2_d)dtt_t zIA6@WWXUUT1r^NmHz~Wefpf7sYR!EF_KOD~uSEm~RC!YSy06aa^}}^1Q-JSB?yG?jd+1G8c~jB0vIN9WId$t%!*MFerzTd=Dm8%CJig_p=Ou(3SMo+n^u z=WA+@ta2(=smCg#VycWs*J1*M14#h8qZ1NP=G%Q?kqlZJd=&Q>*da~@6>3<{KkSg_ zz@ifkKTzJLDcdEsx84TNNhTJM)T7SPh4*KypcmUmFkF_haX*k#w`-3Swqd^O!zyj94 zLJl;4r+X5HwM}Lww%kKLq={Wra*MC1lp;QXQs>hu$ak^)ka!5DH>@r2exlTh&+e23i{n*2HM|K#Ma#6KhV2uaSn920{(o zKO%m=w74D9<_nle;xqWbgUk=oa+mlPwlLT6e$*F;3gwGIs4B?#w?;&^_!fVL(wIHDFrLgTdMJ?qRRypyD zkf#DCBe>pSbF-2E-R4t>pM?A2~-V0D{#2wjK!e1Z}XJF|TY-<{pUc%oJS_;c-^1is&157^ghx6+GqdZZb z0vw0Jg2C)Q)Y3O(mE(GKuSzOhuZG`k zuU926f}s^)NUnT$lBE=}@m6Iiw$Bg4oH*OI^!8oSQWma!Bhk{y$`U;PKugezr%Q`0 zw~|-jQ4u?LUu8=iLF$JjR$or)pFt*IwI5XES+zfk4q4nPzJM*J+Q%s4aK$8xAAPx- zGHacxf_IJ|rCRsN?GEv;gtg^^i2&3V=Rq=vdH8WAeq>>8faQGK;yGmTOtP4n(Bcg2 z$e|R?k+L>S{U604vIzG_WNmn!maw+GITC>^5pO|?h}Yl)d*yTG4chrY7PpGGV2i!- z3d(W40$#xTZ1TLKSK6 z7f1l{BP6Kkh7YWigvz*@R`Lq?rYt-S7r()9i#;%@ z#BTi92_Jy5`MzZ67w8on>)qHpJajzehx?moWDQhBy*E`aVotmyi(AFB(nObdGNB1M zP$5h^i2u5TDsrGOzeN^$d7ACzd}?B@Yyz&|64r+kT6n%Kn~<>`Nwr2$EnJ`CW0R+B zpF%Q-EqB7l`}pxTe8>)h^FQguR`Ib6d=IX3@5&;~58M^kSMrUdI+a}FK2VY0Cnavj z(gsm(TfPRXLuXutd+w*^$_ZYC@CJhC6FdvH9gBNqH9QBIF1b86I0<*nw|5<5?>Y>3 zO_salX+W~vwN(s4ezdA0egVHa4z-oOk$%GU0rLJf-%R{XQ)`+1A&P5TgAKRka7&Bx^gNsD5$cODuKBV^|yc)KZU4 zBs^~4iuS^24{xJCBrCx8!WN3!m?hvEVBM5#18IFB@70y4mieF)@@#e(=(lD5Ovoprzuh0^% z=ikG&^HK5k?W+I3l6a5!4Dp?IuiL+ujYdbTl1J-6zsjK^gmJ}SHb0&G?0ct zE|Lb!`x%wvuwVYb42aRpiZ(R{nu@(e5PDm@1H0jJ5MR=p0{gQj=EGNLC2(YbcH}=0 zN%HbcoF+P&j@w{PoG1z1oP9k4i!tP88oaNFjp9Z30kXvJ1bRJ^KAzgo?g3Dq4P%y01lcW$6v#<77_>0f3e4IpS@-zTO3Z9p( zJk8~+-R^t6e=7dHSYPcRQ6^{3fvJVbWdn}52JfT6*JRCcCGQV^Os{Of;Xso2_qwn= zN|oJMK3bKJm0zkgC+W5RE|m=SrNuz_3NF`quZXT&VO1$C9G!d^p8mpR(_t2VL)j1T zcGT~4e6=6=j{ZKOr?rQ|7b*Ulym+#&4o+M@f^whA(aGxu*7Wt&odu2chbyP)&@kL} z#4NNMK1ntVU;HJ%_G?Qg{I1CM^v&WLSOK60#0U2cWo77zPvA?+#N#((&!1&=J|d=o zv+D0%gHI{7m!}TFY#1Wm4EMFf+G%))^L26j*RX{J;T0XySuZ8Y&is1v*^}pGt*mUC zeAeW-@L=h<8U3v}zLn=UfUzoLD5kf2FLvE2|E^tP<{rZq8bH{L+H{R_|JD1#X^~fdGj<`E0T3 z3K^ywZ24*jWWdu^F%`N8Ufqz*od{(aw>TC0Z^OYllGh=Ueln6l;%RVN@6mzeRAAmo z&&8Z}TtlQiKmm-x`+LGD-axFPz?M`LXG0WN3BNG4D;mMZd<+Mp6CYe|hOiLc!4uWc z?K*@IlvN0q-UK0xG(#x*6bECF=mvN79v#A+<#q_+t#Kh-@ms zCWO@kAcXZYU)3l)1!Wb&vo}HrW6TiV`9y_qJcdAfbO;|`Vu$d~=W!uC|7*e!reb7j z6wuz@Lh$89M`6}w<|usBA42#A`dg2}E-0%Ieh5PdlgtptPzV=6kLx`;gyBXA`^1N^ z=a+;bRAXc+1Z-(8({8ij|zUA;$#Fehk_ z!fF4B8wLFPD+y-wdc-OOY-w*Hyqg;h;q@hE2$TCk2q8!rJqkroR-;gQ1B7sn8NzRE zDul1VUA;$#5H7PrSpHdD2kM@BO zc0qsZ5Vk>Cg&Wn4B-khgkvd$e}TJtj}GCqh4v_%93Mhj;t-xf ztU|z+_7;M;AR598i_8!X!VroeW%MY_hq4-l1=m3c_?t`eAdRCC-l9gK4cygxbO_5! z>=3Fxj!UG1pAwG3F2pJXY-w*HOteGjsWd}4y?1~m9)SMVA>0mS6~aAr5W*@mgdhK{ zLO2LRpglT-moK(MSlbpC!s;IrhH$JM0@~YK2-lq-9fk2RAzbwbgs=_zTZga($|{7< zu7waDF+(_)LYNIbuJ`B={69%bG}bF3fmB? z5U{1ag>ch((NXxe+zep^hHyLdw+>+?lvM~f*FXp`G41JG`+*vT!59MV(IKoYvO{=S z{&ljLMRnEggdrSehk*9>7Q#2@MngC{CWJY^LI_)+zjX+2LRp0nxduYmX@;eKiU#;I7`ILntYP|QcTM(-du%*3)a9>7r z6xz$o5O()K2rHq#bqN22vI^mv6%fJ*GlaiU2)~27dXEm_;Q~8^yEey#aBWw@5Du_I zz?SwF!f$6sL-<=v2uEQEZ$f|T5H>(rh4AWf2;q1$gryNR3MXL*v`2@qJ>L%DllS97 zczsvG5d0XK8U?hsw-DypA)H%kj>7ys5W*lMgkPcWRS10`1jwNclcjAu!PxQM|6}jX z%Xm7=^edDoSKaAb}p42r8Shh*v~Z5QG^46$nfM={xkjxbF(? z3ocg_0TB{H0=NP$pooBo^bina-}63CRd-L#WCF(b-uL_G%TJl=T27rhb?VfqQ>UtA z6UKt#A{xnd6D~j#=+k#j1o~pBn-m-UM;I;9msN1}&vi2kMXsA?_eq3h#(ZgniuyDA zfw~vy+SJbxVdX4{->n&UuIrm#~bLlvemZY7wlxHQN8cx8@z?tZ}7h4rFlT-KV5J7+*VT@{TETSR2@BfDI2 zC9X^)!8-T*KIC}B&and)}e?-#h3IZ{0`UQr^NLu6F$2Q z3DWzp<$ow+{?LM#4MtV4FVa43Ov3OnIy?tZ=BCLa{3`J&E``G)Mttun_;Ba#GJOCf zMti0C;|Byp^CTg32LzA)n`p|J1pxC?f047qRgVZ99Y`17t8oaT!%eK@Qo=DVtJq5v zDrvU`AawE0!;Xo9uttY-Q5fY4P|h5O8f+q*g7^~GFh<|5L?4Hr zZHcQVqpwG_z^>>v#Q~agp7OSCARa=*ryxxzz^oqJVoNBO8T5+z$|f45Ftt zPXMR7ccNc@LQlU2)KK@tF$r<*4A)cm0@M$7BXXJR34HO-`~XGJhmVN7ZI<{2bF@QU zu$jJ!yyi>j91GvX2z(zvNkOyoklRd>h@yv1Ln-uCiR(fZUnwpov>BnZtZm(&0*U4L z;UB7+k6@*12_t9@SM~?ag{iu&6^H?LImRcgXwyVZJC|su&*VhQ@w_(buTfReF@$mu-H8RK{V1DJ55_(PFC1p zrj`*yFzN>L-S;uW;x4ab-s(Vp!)O=-T>ltFZIx8Vz-Rt_dNvG zi|p(M?Ck!SgU2JI-LGpgWy^3y=s!-lJoEv=Gu-FrNcr2BjGx;lw|9Qlj$HKjZ@sg2 z+?=%zqFCL!$V(r_U8KD99Crr((Xc}d%<|wEz6^WCqH__I#KfMO(LG)t{(O!$@13{h zpLSpqcYFfB9@kb?Y4I3yUuYR{VjGa&(-Sxb7xb1;g9?lZc>fpoV;cF#0W^(3y{Mu! z0JknKozx(!l%Hwb`%JmsX!LqE{MEVClC(6M?uUc~r`N+|V$K>Xx-K)$e>c%=&D|fs zNj2ZJ9&Buj{u_2vxc|I{FFkGkc>rhk;LuCuoiu&mki$B8Gl&^_mj}fTnD>{;dRr@f z$j6V`apM=OiVvkA;6cYJMd;}^$Sk@^F5Xd-N881_iz`?) zNoOAU99{W2KFw7?%^s&Cq2Soz?n<~D!s-s{3}&*_q|9hF$!iSZslu)1Q>Y_aXw6wc z>Vo~zA7gri`-4L3I`ps2@?$cP1_^V=Lgbf1>)_i`XcdYMs*}(vfGie$L6AB4AbJOZ zN;G;+6!gBs=;iET%hYxXdf&B{=q-hr%R=uK3%yOmxNb7_y$2NZX5k}BrZ&V7$>b0z zH!lG4b`R|>42KUo;fl~1(5>t|rz_!RPPiiUF7nR^&!2y(KbI}9NwCcrly-lE$e-O!skMxowg_#pMV$3X9{ ziZJzBMWJ`Of?g{Ny)(n;&3;`{@9Mgv7q6nXceF%rHc*MC-twhk^h&Oeq}~+@dL`+S zdgDHEsF!S^_XIJn8}>t(nibdwV<58bGQpI5@GoNz_x zZYBJqqxDsUzEk3-I^ptAu@kNc?RLWDp+A*y$bnNHnyG}7lsuD^aD@^ci?BLdLGKpw ztq=7}Vf3PRj8L~nMND2$EU7l8IhrKDGKHEc)JgOEQJ|+@E?{W$p}WMvtqhAXsG9uH z^iwq>2g>;Xz@V*1jgV5MZKwVD8obWsEE z28=^Zyd)>iUGzDAs579pAE9C32;u~(bUxjM>+cZ`Kk`BXaS>Kqq3p}4_h7d$KVn%w z|2Dw1r{04ts0eK}&5y*wl)(wF$V&-ab8GUWH#j6cm1k8mgySMm658fz9?bGm-TY>x z#gYWI1RsG3iHU3p+wLyfg@55slqgywoAO95(8EJKozaxrvB72yEvG3X%7}+-%4Jba z8LTwrGOH=g!%g|{W!aSLKK?sRNmQG1;6Ah~iP%G{*oF_H6xMG2*J9cpg_WAfV{5pf zGGxU0p#$bPG$Paz+BEo+-^2LbjVf73)M5|J>#)SK!_$@UC?z~V3CAhn-=NytWmh5` zIp3dXz4>#gLv&}od2n%<==1W!{6p2Pt3vd7=Sz9^=7*$=SZ{WiCB<#UoSH;G$$InA z5sEx3#z&MqbJm*;L07x6Z#oUH2u*gv<)K1^!|P2c0&3S^*Py}CLVeGoFcIeDMG~P% zA;O&VBoSV*%yHn5wlgIWN=cWx33X$*LWDwma3r;jfnF~Ky(UrU6)Wg9vCvBlqxZ~9 z61^66NAHh&74$aYgXld2RHCW(u~6ORxb;I$srt@T1wDUrNxeIT4N|bs;TI)(Q;2ch zsMkY9uQNWPSV&Q?mm<|>qSu^-QAKF665geRhdSZ%&>kiHtP=i03Fj)|sR-Nto2>Js z>#1&_UNl9;`pA-m7eHL96#bV%(F@L%6g@*200l+gd_ht)lSHl?MUUOBboefOu*2WP z!Y3L%u|BfUE222rh2A5?xNhhTQqjB7La$*A^ez;-z2wI& zIg#i+rl7awY>D3Y?*bPo((ZX)Qg1ggt{ZxbvGcVk4d6L%e29=OjgElE`(V=!m-%iVnsH`7t#HdQ#t)=AcsDfS@K8W6UEIp#BC-r@aUhgRMU`%n)>usTzA4cz|XC!+6AVKR! zy(?7oTH>R2etZ?FHb0()b+^rrS1I8kO86(NF75nxIq~J8)0A*0CH%3H|1iRJ;>T84 zEk#qb3l~+E07~c(+2O6BLfcAj!kMze_q^qFc*)a}qA4VD-6*;qc7JDtufzvCyacF3 zqxY&%sAY!_X&;GRhJxOZW)i(#Ve~>zN%Zc2yUyr!RME?_&TX!NAMFVU-L7m41* z3VIbyC3+vf=}_-_3%%9ExNg*Y=?;Z@kK&_tery8dZT`9$3v-(vM=0SJm2eX$TppUG zgf%5RUJ371mdIBlzE1r36qXp#6rF>Wh|P~ zjiLqrP$-&%5Ax$dpc0K<69v8R;FY9`@3R&3zB@yrxAb)fy<05wHWA~xq4(bH3VO5f zLG*5kfu3KiA0$7vi9+uj1-&*FdKZS#TkyD~Ugx@_=T_0HhmYF%u?VR)KN|Pj;fl~3 zN_edjzQGBXht?_KDN1;b63$S<_aPj~kF;-aRkyS-!mKfl+f}g1yBotK0n+k!0Bs9x zF{RL?fEBj*O=~EBg)sy1>8Hr=UY6;h^{Mi^AAZ6%2|~&dJ3$D*eGP_=7qEtiX07=` zahH8J{@O^^%2xVrd}GO4cfabe*6~MW-%Wk3&a8FwZ3=63#RqOLN^1y2lh{^w(HYX`b$E0jY6-zf?ih(y=%hgeSzb0 zRIhKYJ9=p53h=BNk^q6A12F|ygbus$+iEMeX^L1t6NK^_g7jn2_F=} z@CvvjQJgLHd*LKdD0axCp9VQ96*Lcxfjv#w*Kq$gzYiaEz7L`$p|tR~$?s&?RhGqB9p>$Ce^hd!|wmv=Q zRN4Knyy$d)TSIn#=}UF)e&ZIU`wQ{G{%soryO`^~{rl8lvLN76l-ZRrBdM)aX z-XHxG^fuvx=sg2eqN(?>(A6dN{E!tY^?2W*O+Ei9l6rT(;85>yP@*@57}ss^^ia|3 zY@v4;s6?aJOhNAl2mlqmdJ1|!G?eI7KJTE{-$HLQF|HeWAM{nI_X<8pz5X%K8!MI) zl6u!hp+`|>Q}0>}y;foL7XDLGFR$+CHCE9}w9s1!RHCW3R_Nsty{9Qfm7&oNSsnUbceXq01uCt{Zyq-=t9QWqi~=M$&=2&3gkKK7@9mgx^%c=Q-i> z&^t=_CM6tD!iN<5UPr`7tS|e_zW_AIS}k|a;g~sjJ1@Cc)|&FJZMtU;=MMPJJ=!}` z-++@_nieRJ4{Yv)JAHF}XKH~Z@qyBKO@BN+6ELcNk@>XXbaC|ylZ+eV1HX2XC6~mD z(xn7|$POkJJO1CSJ@e<&(*S}y$ACtop4lABE30pvJ>zV#5|FHSi0)gKc;@!^UZrmj z)sx%bp(mW}?}X5Ix*$NLu4Y}FlNRUlh+K~$^uDXqG|YSkIxR=pXJt;&4z@3iW0 z52aN*@Sz!rFC0aUY}HmYa}o2Jn} zOX;xvO4GD>*tE=qW5ZnG7Hzt%3X%h8=vTTk+UamKn*wq6BFp0{ytCG`Zf3 z7ORVdN-cYGBAu}m&B%-5w(2pl8kaSJ?Dt`7(As88m@K7!5ZiHe?8$xwidgNA51M`& zpe;#ko4Y7g4!sD|&kJe5&S>Mok7;^pwq&o+zGX{3!st|6QlPZtqvNtAuRh|mB)d?y zq>PP=5+Wzz$$xp3mQ2P6B}q1j8cpcl3VKbW(7QoFuc?KeD~#T=lO%dA>yF;e?h1Op z;sb=vNg$y?VGw#TYNo*?M=>+J#T|a5O$vNP%t>0!mIQ^OE(zTo5<(?(52YpDk4Zwe zo8b_8yXo`X&j3iSV~4LzzG{ z)Dc380cX++T(th$%RtL(QqWQl66tB&Nq}LA(j6w<^%bCgFd$!p|0_ zLp}t zQWDbWCWtHftw`hkc#oc#j!%}$MH(CfcWDQL=1Hg|Jj{UB(ysI zQbFV|=Uo1B)VMR?W9e@EeEKkaKsdOIbVzk?{J{eKsMq*NlqH2ys|N6Vkv0!}%)d!m z_FDIp^(=&m#?_5_OC!7-nvZXs%PB~~EpLhLe;upO4DxuQ7uOaxf-KO22q8<7C$Kc0 zS0twT{L0}Mj!!geh3CL;5%lot8?}s;=!P7vY-57QxU{|&f6yDmTL}GO08E+V8WJl28f6X>;CrRRg|w0} znIaG2V>-Z;lha7kn+1ENk7LwKMCpAn=H)f3fchtPrZB=vkZ=m~Bc%|(W@7>Naq(fD zMay9#%tIE?GlP$dVvL=KSiNu3;!LLE`vd%%Uqf0Dqcm}ApoI^MaWHgFnoep4WA>jro3mAXOiX)J;3V@XVtmlxr86uOuI`zdGB zs89~8{SapdkatlUDq#6ce0Ty&Q$gkUg6!??VmC(@0HlTIOCANq1BXSAlT^Vmkdo!8 zoFevOoOrU=`!^7QH2K`@r}lw8^9Q8z1(~)e1IKpX!0`B_7{IuC0Mx0B9#=0BsBr_v z({k;=<{D!MX9G2Tdb&M+^w~nr`Dbgv#B{HI#F75agpLVR%n&fhJLdDZw2_Y9}3aifDkK0uKsmEO@gBuN(>_=>f@O zPfB=;m!F)B_~$qt*ppT5Gt~29h6?>id}@)`{>#m@_GH(n=J}hMNr-nBe|m(?NK8k& zK0wg?6%Cg9>ax%;ip9AjEcx1=;SG zIT~6aax^`}6v#-NZ|AH=39FxhEW;pM&uxuUZ}y(6p!rjGq6b&!OzsE?F|kfHH>Uqh&aKv8IW)m zOK;=$k;=WJ$YWB-4mvlYkwxtGW!R8IY!n+WmApDQf{mqQzF#H{QIn$B_@cJ4*?16f zi)7>X=n!GF`9SzZsBApNTa%6d(22j4v+ubh+4v2#!e-<5LXwSNeAr>*tL~L-{OJUO zsGFRfcCEt358{JzRV~m8p)i<3+pt^zvaYa4I952i!aD0yGkNK?vmI#Z3Kxr| zl;q)UjUst?9x$+Zc-!xihkqLH@bJiCl7|mG$cERAhs&>4cz7;899`ipe%L&W*EORj z{xLTH&IEQU|Bey`qqEnpCkTCD-I?Iu!U+DwbH8}s3h{z}LmK(>Bfz%#v%a#GRZj_j zcSAVOS|$7u!V&!0dwv(7j{RdEyqvuKO$fY5zC;8?tB*qT0QZiaCmZx$MUa8m{@pl9 zn|!DcU~oTEpe!D{$Xp9Td5f!Bhj{|u)L7$W{&JXQPzF2A8z%)ePnvu<4r%_)^K+0x zGiIk_M@HzX8VnmeUJU{;SO`2ceXZAcrw|$UXs@9-uE~OF79B73WNNNy7&paImqr0* zWtI{aw&lK-{k1PESWk=t*mrF;87nm(o`+g11qIEDY?pwR{k8ua8spnF0~i$H;`)1z zO@K^c9k>N+KWCAgPx-~&ZD=FIp`jo{PsGGkwE`XV^H?X!Q!VGnN|}6wjrV1+PP|u- z%vyG(e~nk)#%})-)&?TzWc07`=%!cS1P$jg7x!0pVs>~GA@lyO&S27DsDR07gSkEc zY^@351$tj8iZ?CY_F#Hpvm8vu10>cj)Mr}WDF@TrV+kU9FrDx!s~Iq$e6A9%uY?;R9OiG9%qlH+>?8ax4<`$Mp#T5d5eNSjdWd8Bp)0RIKL~j8 zyJgh(=~3VHqP}-u9$Eg^sPENL-%FytKaBc*IqLh-sP8FJ-=m|x{}J_lQ`C3osP8MI zzFS6ppC0vHFY0^uWl`;SzHu2}hZ!!6^9G^I;IkFxX2>ToQVdsfq~isiBYXv@A@bM? zUH{N?1QXfcfcNgdCA{@eVZy0lcm~pKc=M4b46l1kc+D+%MlJA;{VNRb?g)5CE{%ns zf&6T5hg#r`P~e>v0q>od@QxW0-j1hYw|70#?e?xfo^X5n$AmY+g7-o#@Cp=o<0Igm z8WZ07=@P$!THt+#bQ`~n2zZ}f5{rHX7QACm#%}Lr3cMeYC*0n9W5W9^DDiu@7I-fp z-NsLkfOk$zc$Zo52G#;ES%H@w0q={8W3~5%e@gt4Yk@Zb={A1!M+>+2p_uTJEqI?H zZ>;gLLl47yCIa3iG2u->e)98(THp;-;CUk8t;>kj-W??pUh`VueT8(py@$9vVlD9c zhk`NT4Yc5Wg}kxa+d+Z%Rs_6uG2wkRP2xA97I^O>-Nx^h2zXVkW3{(~1@E$2;5Ap^ zHH?7wTugZHPL=qr$9gtadkv)9_|2!sltaJnG2u10;2E{RJ60TqcXtH5Bdub!*Fb(D z|7w9ZLV`p1Mf!h-igE$|8yc;h4B zomvxK@5Qt|@TTY_bKyl?$-#l3+{}X208>?GF?15(W&;g*EiOcr%3+1wCFXolWT$x} zB#qENRCvR~@HWw?ZMZ%ZtbPJ`cU$n{W5GK&4DS&MujR?$on^uM4YEC z_o!g?6X3T(6xnIs9t+;XVR(Q3OSHG%$>5E*;5Ci~@6s^5SrXo8!RjZ#FT;XY2FXyP zy+5Zr?Y&XL`&F>|3E=%GitIG+j|Fdf7+$=Dchkw>=@z^evEa22!~2gR=(j|$`U&vM zw&1OTWT?^J?H4%hyYWVUcneHZO&XtYtvTKjg~FAN5-|Y;*Jn~Z0UBT_3N~A*_J<$SJRi68SJau zK<3C6`c5`3AEa@>_lmjF)byC!ycwkN-aXMt%+YUF6U&6%8;GT8HVk z2I*|_H|K#MBPBuZ1h@KjF2SP{T4;PXSf!R zpx+vdKuN!3WUfKKRKSd&Uju+v=%)o6&<=@v{OPZ{Ov|VYCpys|By4opG=h94%Y{x08c{U3zN4hx%#ok+uDY zBAmjOYetW1I)>@p;aG;u#Vh>piG7!4UHXB%*!Ae5QDKC(X#2aszrgb2jqtIBYcJpg zLP!K0z;hSh4qmMKkJA3!z8*YUya3VsJKyqiroNi$4c?XH4PF7)RBwifHxKG**()tS zIDI#UtOrgJ8QTi7x44T|i+*o}Hx}mEH!Ll37LBr+n7`Nb5(OYd!0ScNi zF2!sjT0UF4a~AKweJ7`J(_mrxN@nDU#Cyl1So$L?3Ww;fPB)J>V|($Qi@wBZZzt`N zd_1+j(mf^PbQa!e_7S-(VAxODNTAs}eT`{n7aw$wS$P&=J&eX-#MH;AtnMi`4c@$$ z^?K9Cq08Jw*EgaZhX4k@OcZd@cYJ$hiDryXF}tG!yunvRLqz@@1=0qtTn zz;g-uQncVbw18sl@utMhYC#Rmo7IB(ADB!ij>auOzi^sZ0)Gub?^jVG0?j?i4w`H4 ztBIzpKZ?#_H2>9DqPe5ViO?JgUW-NGZa|YRtspRZUI%Yb@U}pcJ@j7@kIpPH|3v8s zl&2x1McE61vNt$eum;O+As#AAgi)P^#jqHPTg^@<#J23r*w{XEH_4+A^@b{os6C=F zJTFYt0EU2yVVBx5d@hXP3ul~&p6Azs;elbSOVD#a-upO(4L)G50xXN3*dttG&O+%3 zdagl6i=N+OpsLtDK|Es9^JNZHp_7<9Pd^d1_X|$1IlMf;R?^cF3TfLcdRC)E1cqJ1 zW9cej2<>zB2$zHCP|bZ`DSTm;D@^dH1^T;**#^4Ob8!L-mi+Gbv7k$*+nu zcVisgLaSYjZ+fDTj7VE6laTr0bSQPz=F_5M+uR7y zQ1@;UHF$y(u}k`q6n62La2lBR3+{29F0v(Gg&(2_+6{o)b}+}pezmN_aGf`tI(d<- zI#7y<+-fKqoMtx|BFmleyr{vQQIx(5Xz`c3x%{Quuz4A$C&Tp%;bG=t%MhK4tORND z7a(&4NS+!(WF|ilDH8R{N|`LSv)dwxf1LUTo3kwb%F*;~iwM&EW)HboR!tBynHO`) z4F00-r}4`_PHV#m1lo@D9ziWLnNq+5J8hGY1z^|`FWAO9*W}GE^}4&1LUr@H^Oj_- z&f4$ESZ-cIsv55C_mG?;hoq-bYKt}iwCFOGenB+So$;zQAuW>=l4w3Bq)uY=bF0~K zmESG9fMhV6iKe>xGA@`rPW-e_S3AuU>}n#ZH*V~2x zsKQnx33<`Xa&y#dFrOJhazOrR!N&y&Ii(4baw6{zoGCd<1oa@!PiaU3iwS(vFqTv% za9?_kc^$!GuOHo}OyM4T3jan(ubt*&r!iY?6JS#@R-;BEaNTi-h3kSu;DZTpc;>mUynYD+ZpA3IuA!a}%1$nWrlGM0k#XM5r+XVj!5WvY6o-aTi1dI7y5| zUO6D8#6(2@cV&c+lL2G`1Vk2q+dKmA5h)yc3D$G%8!9-g8M0WyVK{{YSu#>W97PUt zN;HSNGo-dvt3)`5tZcZxB-eop22(5$5c!;3mJ%f+#85(3Yg^Or|{7D;Bfc7tRX`FI-ZFN}Ok zAZJI9{CqJe=QBaNj(l`5>2R-Hv;E~**Zm>O%x-)Sjdd$Em^a{%oh+N#=EWY zrZ)gQxdead6x3Vmm~SBlWYm}k3t?@GRf^eJAZzuytudDhWFcCAvxcdVTVS((n%xI8 z?JQ*?3ml~wQR_2v&mouPvb@3kmnb5aL5hv2f`mXNsc_5TGD=xVa?P*+$&^j!ZNhr& zRJ2N^VsYsnJb;^q9A+G#^N0`}VtIs?j7i))aHvYcZ(MFAh6_4fE^8wIQ+TrZ@ zb&RjTfgc$!d%Bqbw@|X4ULjnd^?VG@e9_UBIE>5VSM2=)o_70o7pd6EWAqi>oa_m9 zlP5loVFX!7R-3!TaFWGBGf@QoD6+oSk)jafuW;7NKTp6}Q$AxXAj85o3?E(CanozedzwCrLKvPy_`cC0R3pfWmJsQNJ}F z$BCjfr1BLQmau|7whlrg-$m#(vNV!eMlnmv*jYmCBBMhAvs5R>giXC%MQ0s{q9~D4te`=RG`|VRUP3;e5G$FF;a8 zBGeTkh7hXW=D(r)ttvvka9vgX>?$6yiiWO7s;z>}?oahBQU!zI6pHU!_A`}W!*v@n zF-k1IK8yz%_W%SEUL1%7^p{YEEoIqURiDI{I^z>oNs}FFicWK7FfN#Uz4!?)@2!>M zC5Wy~U#z}02C^&Y&#oZ*Au>70x`^!C#~j*L!GvFJUSVMvVPF+hZ;BLgN`={ylx*&z zu^^wc#fFB5J1aEUB6Za)(FNxzNsDZP|7al)inC)5*fEO~+)ft|ezucdK>#$qZa@qg zj}SsY(m2a%u%K~~z}Z!Ci=grE;-?0UmmxZu#-VMfj;%i30!`w$i|)g=g4OCf5RCA* zrhVRvJDdT{Id&_pMqI~$Erd!=e|qt%t)}278-ShWN#U z>exyOHXVp8ntrBfpad*%m*W%70mjk_*R(+PQ%3=5wyi(sm^(=kG@AcNc!m9F9Aq>7Sx5VeCqRTuMa};VkE`Vg2eq zaJo-HG8bT}_~jqgqG=4W2ZxzuLb#$EL5g6eIR*Se;})x8x6Ks4v5i}8g@ufxa|Uun z7`Kijpg6#6M1p19B16YEZr#8RFkEg)&H?FZT%8H50r~?J!*-Q04zhP?3@jC(tc@17 zMVv#vD~`-9M^RND_EeD|huINLv?b)rOb9l8O#IL$VD(He-|22J*$`3u@kCZc);b{@ z(d-Hw%)5?~YhiV{9D%IWf+v7Z&QNrVWZtHY02k+1>dd^4*I-@^%xk*pvBeW;ZduZs z4VL_xwIB9c+G4jrUfKWM7gU1I$r<`1F?HeXM zc+O_c6Y-(h5ol7;>nB;T8m$Vm;KS*oI4TR-6Ihat!!H^t_HU2`rYmHOu&caCPWY=# z_aiGcT+a%!j2xbR5~i~xfxY5)m~QtmcDiJ`2YQ9uZms|~TC{I^854rZ=ZPOOozrz?gzHldVDsj~ z$E(F9^WpWWh;PUE379{LT8cSb2z-nc^QI$`o^8#3A}*?GcTo$1Jr`(kdc|rZ^dg#L zg{vCbk@H0xU0;&oMp&3oI-1p@O|r|%Z&JFfS@m(J%N`U7N~qXkpkWM1A}h4XgJ_KnN6-ZTg)$^beh5M;^r)r5fR16>y-bu1*9@{=H0{cT zjFYsRcB4YOpMaLl?j1!!1nn*mQMJ}qO6|sN zu!*z|t&x1j7)zhIA7KCQ^_k~@zZX*HWctiQQ1776Jj|c4KGS?Zd#ZVTpkf>09ew6d zkH0r1)UMC$6hr8;Hv#x0`iy}r)Mq|J3FtF}@EM`cOkkG;lkXFd{#W|UD2{WZX$x`) z<`8Al_*?qSpJG%%Aj-+)LojT3GWma_&rDjvhY)#9>Pp$gQ<4lervK$RSRf}y&_0%5L4}E430I`whTFU*5= zP-tGLi$aq`;u)?Lf-Zkwp=q%%%yqAIXD1X%t~&^Jv?criCIpiU#7~_Rno|VG6DTw- z{yd37lk;<}3eBB+iTeo^n$99i)b#70Sc^hq+czD3CIIYW=`;5-exjq#JZ}*($DFcT zlC!N@BI2TIw)7bAN6sQUE<4P!vE^_kXyWKa1q^qCC6IiWsNdVLJq z?GZ9g%Gggdg?6Was5b5H6A2NtyIDllPCLx@X(G$X^qDLF0NQ_9pYiC&Ew|`>H)}@o z9q1eySa@Nt30V>0G`W_-!*Fc^8eU^KZ8f-q&@soXgpx;74E|qfIaI=mG5ibIWEMm5 zv)r2CczXK|j>itycY~yd3xQ@NpO2uByfj;&5-w-wS-;Eii)|t-m~lg)P<@kAk)7s; zH<83Ys!>?YdlP$dJ=c#>1qmZziNSuH=#At*x)S9f>4SOegqNH59(W*aqNOC5{38-I z-EB6MdEdq-+R#Ma1slx8S~z);$ifPY@h$Ggoi42v%4BNq`uio3{IUxyfLz+r}tzZl`=mrOmfyir}E06_xOi&BlXBFt-6u1-xIK#5bJVw`)+{&&g zxLvlsXIa-IL`n0&T`Y!7g@~|hQY9jIAhucR6UrmQH7;Lp*pPG}Z5u)J$WPKHCAl2S zVRr^N)>%Q90ol> zhxmgsgYC4zVtfUYOOc?ACBrpM-; ztg6@>%R1Y=(OmGRYY-!X$&ZpZirs(JWj)nRzPGfg*`#_sOb zb^w>vZZP+uw*@~lwtPmIq9RwYTPBXWw8bQoz1(-1C2vv+7fb<(;(TWmE(kE-Kc#TN zWcUVPvOnzIF%O#l;WbT|F&b#W5ph~W6K(_kQvhC` z(GiC-+N@ug5VsifOq}WZ4c!Buroo#2Bh-_xkdRd>lCZ!ZO#f^B7jxrgX4>JK58tFY zc2OLKTh4eu78j!aB1-i~v9nMtt8`%KEhIbm0{AEtt@_6De*mjPViorV3?4JxTd3yvLP$L2f%W(| z*|$DSgWN&5(jNOC+2)uwJW8AEp4+QYb-rNQ^T^rvQGUdm4;5SaXd^ z6m>uyWF74r89fRM521=5WP}%0l*yQ-GA1uE!K!o)A_@=h@-;6!yw_a}eY+ai{o6h5 zIfOu=(2w{XIzz-woo2;V;FtJKn~y-~e*6Q0{1sH|JsKV^(LWcuQ8tgqeoIBQp}FH{ z_Mksa%cz=%M&M3Pc-mG^n&d`+ZRG-_&|Oe2d$rus-+N)r@lKWt>(ZkbtHF_}koGB> z-ax~3m@VbFmhVhBr$htg&=c4DLms?Fk%F<}JJW-WU8wFGw2WUU7D8iS9Rr`qSs*+F zme1{_W$bn)Rz8!lJtboCg}WViY#Xh2 zkA*R%6UpGuvYK};oa{-4fgl5ARfO{18H7#|{Yg54glnqKo}uZ#XRS87VkB#Nz94!q z5pD$RU+S^ua4@76lyIwFH;;kZ5$luxZ}5F`Q*HPzTo-|FK{USXAK+}b9=iPhYP?{A zbHBh|n~t-&D}Jl7yX@}J-b!&PyybDtI#Nv$zZ+HygQ>r@e-$3&u_^Fy%8 zb-_zK%kYkCa7=1{+%+2?3ZY33zv3Q{@L&}ESnazRgI->+P=zbx#wPxpS8nlbm;meSJaRmxrIkt`r6>%R(`)I z3+VMeW8zM;F%hEDmpvdo$#;e1cfw#H{}=WV{?0%i*_qS)1(T%6&ij#xgn(%-V>B!a zdAcBhR2$^`8}5I94r=BX{pK!-heZ*flikzSAPUp>QqLWU)9^A~$LfthYv*i<);()s z031U0H`;t}#r0tvRRhF*WyN)7TzeV!ffaW-JOP1N>(rOO}=8Q)c;CW`SKN*S%=3(RE|s;GnThNaUle z=}9Cz`gVStq^u+ zQ_cNiv_jsqn2us%s(@|6cNetDT>Yro>sz6Sq~v}Es>g-)!T>AhLG&3dGN^Yb>NOjo zI?R)($Y^u)JwzNqdsHr~!gtktM}C37Lh)#h1$RFUyJ3Nb@gnZ>z-CaJO90+lgOHa6 zOt3R~Imvv&t_2xqeIPr2GU5s_$Oh!PKN%R8pY_|&z>${z%WZTQye+fcifkUd|5uQ` z*O%4B{mFnk>NsD;8p-i{Ql! zX~n${?F%hthQN^lSYH`!?y-vQ{SGOwA%(ohc?q0l^C_u~tbLI+FZeKcbPeiZJ^?f~ zhxVdKKo+Lv=?^zeEy(`eUBrEGtIMDm$Bli){mBvYt(C&KTa?V&!|b^X&wiUDSd-OV zKw%BzZb6*g!FPgXk#6R*K z2>J%(!=RnDBR5dp(w}K_UwgpfWcxGd#62``_72}w$T*wXd_Owl1D^{2J@tt!^*T!N z>Af7GECY@}hWz&`q-&V}CL*7E+9q%v;Dq^aYb7WT%e%^drEf^k?J&@-V;XH!s}Xm(jC;U}t705(O(3t`V#Tdt91a{XuDcai&bZy|G7NPq z?tRAng1E3m$ThkN2D~^AkDY;j+lj`f$btqA@Z%Q!Hs#@(~VF#h* z*OCnri2{1al9D;7&HNp>*}Vn~ZerYO#Mx~43q?3uw}@>hmz!O3J)-jC`?d39u>$N7 z3)uaLtCb&Tzb0$+BGX^z#|BvT6VGNS6`LQMpz<(3{;>-D_;2!KJ`RbL>~1h~~!uXkjEj_Or_T`VCV43O{y20m+Yx zQO!yCu|4I-U*g9{zlh0?AG`wI>%)pHDS~G9AwPCToXw9n2&uloyqxVOKhCh%%W^#c zE7`JcV*RdhL+{MWZYi*=Q9kAN_8KEo#6u)8c9y*Q6;OlSMK7@Xc{}|9D6FOlOf{X$ z&I&DX&^@+0{*Cvyfd z74#7MbCcTUV`-j!(07~X(@#dMo6G;I8p<8HWxnghhFu}r9p}Re?Vrm@f#8Q?k3ZvU zt?YQB$Nm1E;{6l9hFK`j=)=v@;3>F=E^sJ*?Ae5pi<{N3GW5^Q)0OuuJcb8vu`C%? zkiE+H7+*zkdGr-kpd&WjaO0fO;nPCya+&EIiR_=gp2Zjg{Oe@Rbk-Dyy(?_@M%Ws- z(Q9-|Vej%Oz)YHyus4_%?tCl}s&13>(!qFl@p(`d-E-@eV80f7|J)dFU747QhW1Kt z?bQ#;ORdDhnYW$2gWPoO7`B20$40L=`+(d4maEiVAU4;t`cI2+sS2|0G&`_w^a=-7 z;9w*7)NX*Y05?}rDLph(I)yX=Oi!=?FWer(=``E|kC_wFpYO-6)v|wdPq`k2V5pAM zGJf>p=vkT;{}VP~VTmgf<`pb{UE%_OSHKA3fh4w*ig!z%T98krA)wJqs>`xPy1_BqqAaWWXodNZ*P8<&S zMw8RD_+QK?{vZaRBF|r>g>Q}vUlaC*pwL$HoaL;XyXH7iB6iayF<%i#sT(HK8b z8|G|GcnjR$6AX00OW^zO1=NVNtC7}#Y4dBQfgV4hGaf`Ta+ORJEI11jq`9yr8XR1U zUId^~H38uS8v$iWK%FF@egGuK9gZEW`aK-}N(pa5n0zV6XOB!T_T#F)w>Q z1+ln%tIq9{k7tv5dp@&9Y%&JJLMGtPji>AFflMPjHnm4KozBhSGZg(IP=?pISNQJL zg7Jm(3JKR&JKa#>OQ<&%l^UtHe$+#y2q?V(s4QnijPG3F>(3+@&w-)EwK40xPHCF>L;!2 z*F-ITP1fo_rv&%oOX62*MqeB_TH?Dta2+Gub5}F&sg20*$zJKZDzKQr1Ybu)_T;!i zxtm$-``K>MpI!~B4^hO$ZlUizAZ)?@CJa`>u;#2|Pc{I4u{#d=pdUK%5l$Yr=f zbZiR8eiGKQ?xMMDm%bMlj^=)bU}2RTq6Bt=g5U$GTk za$*{%wVBw%z-Gc(-i#yg@SD(7h>b}=7&e&liJ$3fi%Z9Sf>*f#D+RFpA8B~DJBglq z1EWFW-cNwsY8FV4=fIE0ld;w_`5=Hzn$!dVBKL4}%uU6mnp*=LPR@|GHkV@WiEmXW zRc(#1AB)4oK8#7J=-N&df$gpF6ggUm3oPA8EkIFxLHFjc5SxqOFzhHmnm&XWvLtry z`lVto!(DWoy#p(#xNGD&QZU#}i0C9yfSV|ihl8U?L|MQSyaA`uX`^>Ch0Qh-g{;=&eNn60B#*v6 z)J~McB;}!Nm)wM+^B4W1W!b%8G^^}Zb1OcGGRpoO`jbNnb!w;+oN8OPtvVOl<+!SU z-!7-2&e<#%SlU`)NbH|EY{#)TE<*bm2JMGO+ixL%VYiEnQh+da#Od~&MrXH7?7w3j zGv`@q9Xsi(2fRifH@Ezb%D98aKiuz{hnYKY(B+<*1pxN-M5CS-rOaWa*hhtCk)!FA zWR$gKXfBvwCE_D4nIjxcT(kN$S(ukj9WXBzxhge`&X-saJ)c7@ttUG}C;&Z0Z@gSC z6QN~QtBS!t5ife*ix<~HwXAj0J<6UsZh+XsPVDV0)U9kN6mb~)*sU`swK(2TC)h*CyY4mQ9roxc?{G;PIFj#`Z1Dl%Hwq9< zuV6V#_)j6VoB?aFD2#@}a*nx!*%<*EU%AAkvLLz=( zmm{e+qpxYr=!o;1p|dcmjwv44rhbcBwjOqb4M6!Ah8zSXv`se)D|c}sL4vO^9Rv!V3DXE9GH(~j7))CMap`SG7t+f z*OZG~abnM!Gd>;nA)+*643auDxEg-b#vQG_#=SjDT<74+J-17|*BFBX|DQe$o-1*= zWMsV(*Ws&N@Go5`Tv<@|oh$LV9~MRw(Rh=y(cx+2C~=Ku!g`tD;qH~up%bD?Tnh7xaGSgC#=`E4K)rIbQ24T$zh!qEx8l0HTHloVMb|HgUxRx}%3c1Wd=r9h#KH~R) zd4u?cf4KPFYIejgc3D9~xeFcM+Z^&4IO!n4VJ!B=hg9!&E*gxu@RS;Ak0eFn+55Z2 zr#ih4i44P!)$_QPU-mBo?B8SP2Oxl+?_&2n0!-P=6vH(=oxKiwY=1~bbo_L?ij&IFk7bzTd>jly0qI45(Xf)o zE)70}R(Ba}cgbKu_dGzyQnh*Ptg>8JXJdyjG&=5Yay3mpL!as&X<^m24y-RA? zfC!70Z9wb_>Qm%n{z|P1nrnbQ=jEiZ>O+0z;Be?H!FjfxQW1Ixn+xh{2>Jo#r5GXb z?18%!G+eA)jJ~a*^}*#SI2J8hMz0X_TTx}ZMWkr|PzAeR&_7Dwkn)#@>O4BE9YX$+ z<}f5RfAb2Ldaw@~2UMF&n(K&mH*NqUUkYHyxrCNp~IM}Nd={(%S=Xn=5nXYmxVrr{XSYg=Jr~29V(Kpb+9vmP+KmI>KeFxasBlPZ@ljTh(~{ZEv{g9ph+N!Se#pYPhO@g zSUbwun66;AW3{I_u3(m)3_Ambg3E*%+-;U1oWPgohPxhBN?#Gtpq#g9V2QAhM0wM7XZ}!H~KZehup~aBB?cl0;v2P?@ zOnn~Y7_%_vy0-pLghvalKNV6Q027Uv7)@|?BaA}v1dN6LLeIChyCfX}$Q_^^&W0nr zUBmnWtTjGkgC&%6C7iMb#pCU08caZ7!pr$^$tb=iW4xMPh-hVXD(`}arO9{zM(qt= zeMtH!=Mp3P>LPO_M`y$;beuPPmwU=ktT5yvkAx2WCn8riu0nDbr6Y^I8?^KZxvN&n zjF|sWrh)<*i(oJjmaIF?3rQkqp)k#Djk*iy;*X&@T*g*$iOWUvU>t?ZgF~5hNH)n_ z2Ea7JL)v*Uy3y$n4VgF~nuGO{IHAh6QPKfzp7FJh_ae(+2&ij?G{Sr9*gT1%1yB3p zJ(o2co9!`6{9<1BJ;G?hO=M@oPx6^vw=fRNY1q%LTMEA4Q3sI?QW2pz(nkAttsY`BiK zcEw@9N&CLu7c)X%P_P@=kq-Pff`_ivf?1pZ;&+GM{4Q)iv&yfpNA|-g(;Gy1@Y?$7 zmJ_B2rFM4r5 zC4gr?MHoJ?&oOv3$@66t9%g_~1qGjArrh|YTCkY;ltX4e@g}p1xewXa5$w&8z;)@G4FQPYZrR?qG9EJsG<^;`HGz-&t9!rF{4S z`^NF+I>3o9!(PVd?QEqOAAg5lUu*Mf6-W1%vYL3yM_4SsuCus-C= zvm2_bgB_M$fB_oJfpvGe|0*m>oC5<`{8e_rb>flgbqBc|g>ba^-MBtp$3(-L38XOZdyg_dxtkc>82rV=rD~>m(fdNgVErQ6Ph;Qaw4bPdnOWh|GE4?|HupDkz!#X8A63$qziw8u+X973uPHDeyzkC^fq z*dMAf{;2pZF2Ni|#XQMe@h)nHhd2m=GXYv~P!f(kz@BuOxIi2oVcsLaV>1SCjv4f>*r4fHS>WlgU?!xc`QSIS zSi$(jiN=0hIrRJITwq9f>z>=dJ-1m2T-5s{m7orso1zHTyCzBgsce8r^`Pw}pe{({ zc@>`dP||DAg9{&po`=wBb)sisG7U=D@C4tKRefrIi~bcpio(Z6xc&F@ z2D|1&j40u_A@(A;p8{=(3mFidmqlQ;hE9j>0p%%E-d{ln3N6?b>J1(Xx&iy-u^tMl zhcO}sA}pw_#SjGNK*vd=IcAwW%>(VOO`H}F&u)xra~C?Us*U8!uo~*kK#SolGL>$! zwwGMmB&lK!e1oHoSB&iR4S_HD2&Xsv-@o`lPtZ`@QKr6CViWy3zW{yHFLL{0hBy!x8Y@*Q@CDZ9gUwISiV!rIXaJ3&`+PS6y3bT(F#m%Z%-Q(I z9>q^Bv%}?~j}f-VnZ%*DDv4if}#Fck)3+@PM+UAEpIiY>M1QWIx$^dZ$>J?nN8KPOQa; zcKWu5WJ|t7dR58L8Fu_?D}Eu%RfBcRM-h^oQ6BmhdrFdDxmJWB&9b9oS`BOmhXxac zse;3asDOlMZ0KaxZ-7{pnsWI z`y4Pshq*@r3bwJ1w-Hb9kA_Dd@uUS?zhL4@Obv2Y7Yr(MLo6Pl@Xl?`R&nhh00E|5h|kN z7Y5*JcM<*T;1>bc5ST#^k)lDIl;mc#STQ@2-XjDhJJOc(<{f172wOmF+A5}O7yZIV zWl7=nvm$aq)V6jPZ9x`$l$|LC)K2pwW)yhQ=`9kj*rEOsg$Oaoj2vl|X51?bqW?ut zV8jUnAS}~D>|#L-yYx{qVWimA&`UiPu`AYnawbC61f4*=WeF7asyAgkcVtC8$%C}l znKs?*^jZzzw9Dp>gGk;Z8WbV#xzBtd)7I2Xn}f85O#2jRc6Wb+tx-Gtg%aL?uyVeh z6F$_zlC_A2_S9Aj_RZ1e+pcC>#uDh4^c7o`{e#<>!%TPJCYc|`oCzb;K9Ch+4tiMc`M#2e<(BpRz>_iE6D>_WU z-!UTNspFBreq;{3;(d2R>BQcwHBMshC7kyPTl`QadMU@=Wylfzo+wkGlFFT@R#1DP ze3g$9slRjJAm!gxzX|_il3(3q6ez;vn1eT$eRrP>zlp3T zCVoR?ijAMU=oR*ZieqQw@MQn&f6c3p$iW3`Juy)Gu~si?h47}umPM>Hnbx)!NCB>| zFQ7Y*!Cwc!Flv`e($I;VfR_Srzh(Ku1ej&{66qY`NQq25R)hcPf1PSr&F2)N@ z(w#mAe+V8No1-lV^B~*-g}>r%_$#(ECRW26IVG?y9*2#`HWFqf`@FVsBaE4)qqOWp z*q_MW4QrRas_I*(y;$#H?9vhW%3gv+pThu;x-ZGrZ%o>*if~QSSfP)OY3mJk$??(` zvJWDpW8-dTpd|C+DY!Udpp-f9O}n)g%e}(BN@vGj6qh<24R@}f@8-%!6XHDFWD~BR z(*3c$<^H%#E87b9#{=+t44#4l(Qc1g!!n8`$dyLv!GB7x$CX;c<-zOW^r)3>N<)~^ zHrnZNjsIQxIePUKT42*r$M+E<`70vAG%e$Ej%20@S4b`XhupxXgrV+<%YFUf_}I~Q zeC&gsTw})vu5fW7nkD>cpW=?DH~8=6 z{K4ZB(q$f9Pk-7mUb@T=B9B`BwBY5*%Vr=i?sKQHb7a%+W+cSHR-2fM#YI7|Yg?-x z|I=u2taGQDkqf?F0(7et zIH6kAx&<90SB7G%HlLX6z6H?bg!^m~UWRhtz(qP%Zm}?wJQbKMjSTU*--ePmtfYR3 z?DDGEi%NHl98a#r#ifz`$+gJXk6eq4gk>W)3mdO*VX;!jA^c|WQF!;Pi+6K13JoB- zpJ73C7^u?|MyW=#%CdjzerX?CkP|MYy2O@RtuvD0L4P^L@SxrA&EC&EvuNTTDa_Cl zHs}x5p4v?$($3+Rvcr{r-PBEZZ}I2-Ks4rJ2wx6-eDEm#Qt z=41oGx9B62Hg()teIah>}uiN0AKhQ;rRVF;P{KyaGZ=R zF}J|z8vt3fHORoH47@(#-k%Gv!v(L$?EdPm!!sK=5F~EV62N92GdFPC0bk$227I^P z<(=n@xR{v0R(FEk>c;iwP?KjoB`tSevdPJ}L?_Q7GHtUhw-g@M2V?EOOt=7Zl|M+^GP)YpC ze#B4AyQo1zLu-562_q;ULir9^+I7~|oCoB8ICN{C(RW$ZiS#D&KYV2a1nZoBD`G!y zZR4aCluyM(#C-YL4wSgxFPy|JDn76`>Cq@p#*!WqOvY;XGMs$C@c;Ng&MC1+$q6R^ zEKwyGkC_73`zmg{^8(N1Ur!g;^{Q7#3$SAFU*o`@Ib-4-DZAX}mMFJ=AXjq+qGs)< ziX&{r(MnG=Y12DDWB2MO|23N4m9xxdkh4-LqpJ(X^NOAQZqh6@kFv(jnkgm*vUen# z-ftr7x?Zbyq##-LFn@4*8WSHFbiTaN0B0!WQb;W4C)Lll6)Q}|RrSXI&3VO^?Mdc! zy>_)VmYc4c#{_qjbp?G6z8pigv=N%LOXW-_%9GO{h_rV!au7vl& zLeoB^EOWBr75ZR_wV?I+Z}CH}g!TE0YziO3S)`mrHwZxEfosKY3;6vazkN=GXHus= z{|J@bV@pDEqDWTcl2xBSSxsDH3JehO5d5Pil&tvJl>eX)$JlZ~Op427MV%>oiht8i zgb&ys0%CpsE&TAD2vs-XI*~?gB>}ZQ|9n#*pvLouk#<^UXygW&@D_a zVccdt9Cw`wExvPnJwccSZnWI2s_i)u_EL>@!}siDOGIfV@KMI)bd3;?a5@_ppw>3E zk_;uF@$`Acp7){e@tdIUVV(~aYTL}hK9E^hd4>YMFPK=^Qfhtv5B#tTyV|B$*v~cd z)z@1+akApp9r*b%KYi;ujVkr|XQ^a?EeU}ILYv;?)#pE?CY~@QtroVxeED;gCvCZ1 zSRuvZ=G$fbn_k#g?GL-KFY&`$Sk?6w_D);LE^NXS*oD1{v~z&%Mw9{#*XJLg%u@~I zx4W>v1@BlkF}E7N^}I+;T6&9S0>DZhpUrQS?{aCBV0pzU(bq;*m|D_RlmK^y{OZriQDJdRhI^`%3fY zA%{Qe{djt(^&(m?@m7znSl25|>uG(|#WbAJN1fp|j6UjRHMO8l6srG1vH1nT1$70? zTK@?Ib-a*hR@TRz-Sd;xOQ}3{2LHHlu==Y&-Faj+-Q~(-ta4&PP^S1kYveUHyQKr6 z`2w{w=!NTa<}}DvBsR1;!Pv$wS6qz}3bC~7bS}RKag#{Sq!?xhaNjptnxOm?Z$ z{DS41#&_f64)I|-D_-{aym6tv#TPXE$@tgoeR)UrRxBtH!m7q;tL&v;SzFME z=`v79enZxw=b5akmjpuRSX+S6t!xil;2dJJdXd$^{d^CbwF`S!%qflLiI>$iR0VFH z=eYnO2l@Pe?71abaU9<}hiIjddFcNG+C1E}xxg6?;gL0qtOML`jRCTm|e>oA-3 zN3wqAX6c|SXS)EN5cQk|v$+7}B`&)WO@~c&7ZL-&$Yk{%c&91cBU%T1!+-$vO zN9|ADZ1Gn$vWw0B#Ld3d&He#R0JYz6v!|GBL8fZIuS}qs%>6%EV?@ngEz`>KfN6twBY#Bf1gv6!9F8ya^&EcJOMZcZVh&=NHAM$dX$FBt+l4URWYR0K4-Dk!M8mLpSe>@Tet1QBX1ywvoJGN2NzHiGKVL_hrPonNzVr7eSSa;|Hr z4BWE7c^Esbkx&-ru#qjR$42)dOYNM^=h^#3)#=!}cb_I(H%}0UE+IjLlD>n8Bv3UB zqA)h^5m^gloG0X)DRr)il4$(@1sFppf!b4`PB9}4ZyE23aG#AfWCO^81+^XZN8uJPO+OXmx*5ooNs*FQIcI<{#aU*$fgXt<1oRtIi zn9wuuTtn!*>bjh8u5(Pw%8WcjmE6<`K-7hI74Zs)-&SUFsu{#fT5}T{$K?ZMOU_mh zo>lbU3|Lb<74Fl&Sx#hPSlIfyynM7)EZ*GIm-rR3#=BuL%&os4lEN15_W?aXXgu(Z z(+Tr_Rc8A=SuHu5;#NS7)Ed?e{-hs1SBnyafe~TCBxqcUb9Mbi{tpnm_MZtR`<}Z+<@g8u-tyX0wEBsPIeg|!f-0(@(1+-^I^JBJ zC<(>qInP6eqSqseU3y)Ic8n(K^Y^ALr*|Fn+L>0Izwmi0di`I!UT1P(%&gZ?e%bZ< z#R#)rlSXFN>-4Fu*Xx#b%zKCyCs}ruuV!Cr{?zpf(U#$_?s{#c4gY#QW%zHi^VD@& z>$Qu9uo%#5z1G(F*Q*mXv)1eQ_3nCIDyBRUgs|(imCv)+%a9zhFY~(Y%nSs|AW8Rm zj znr`{JvrNklS+rbA%Og`w46)VuP_j7Q3PCKmp8O=GQBhtup-A5>0jwvGaif2&`Cwu*c{+rJ5_QCiUuTTrU zqbyR+aN|ogyuhV+M%$55IXg3^P~x=8V4Kcx0e3s(I@a`S%t&lBsl+rR!N@qusffa_ zF|8-^?q*>1pO6eD4tcL;64r_rJg4!*vpSZT5HKbT)q2$DcgUbdY@F&u&Y)zF&?xL; z*JxiEjAtz}F9D}8evBg{gaKj1;P|W7&vsDV*OU8Kafyo~`5jOOars?1cfFCHOw9ZV zR4)_~z}sB|1!3a%o6O27Hyl*GyQSu zgz-n{J*X7swrQ{o&6oAKB+}8wzx=D&Y!dZ$HP+xa+@ZRBV_^EY`?t0nm*_H!jkJCY z=@S!sZK}CS@3mFaU@&nK7NnE<5mSga)|6qyiTLXvlkNmt)3x?i&knT!yU0e*AF`7d zgJ@Ma@u&t6PRuZi`$8HK@$l;Nj%(dtjT_4JjYtIH_#2+lDc222^iarzB$~}iV=8)! zO2!O&FQCPLKH*lI@E$&Q8bNfLl@HQ8yIjl0nWkS08gp$&bvD}M;3+nUfC*lBrLLKn zOYAo{<8zdI@}3q(?@2nG7%;oaH5LbI{{dNrlCR8Q z^3FahBqvh82pZ23C$xb`W zXTA-3(UX=&Dq^p!%xtGC&P@lP>*`Mw(IQLED z+Cl1p&(2*KN}h-gW^v>+W89w|cy5vMu3M>Z$v(C! zHdASf4HQ^&{^H016c}^9K?e#fIxLn&f2Pv*3!%d(_BHmml=e3_dRF9Q*Eat19ijMZJM6a*Zc_bBefOlcg7WA>(i~xDOt)xZ-W% zdg!Zx+SLGz$5Objn#|k9I6^843+k0XofNpGU$ZTp6hGpKQ<7I7p$K174pmgEI^Bm3 z$Irtt_bLucmlUC! zh#GW$aQ5do?&1z6RL!yOb<c!1?P$yFYWL_8teB0C{pFFTTblM%);==YtzSgI=+L zPXcW``WKErAy~fGoamY$x}*U#%>@dc-T)Ne%26@4sbKP9@*w>P5rI%-tj#y9(K6l% z(J~=0WbRAwQ&Pp;C{MBJVoIl`r9O$(mFMVyRb1~~Ojbk+p}_(h(^T;;gNZBju^~a{ zK)MYjj)IW^ukRJ+t8eNiRt)++uKtkTctpE54|?Y!HQ0J4=5^lA_}E4+;pBfvv7Y1M z3J`zx4cs%QU`e!7a?tt#xf9+-Ta3Dz%MIK`)!l~3!S20=@%Q_0FBsSO#RdQ!o9eyu zo4J3$6usX<9G|Z&VGZn|cz!DH_Ov{E+RVi}=B7-7$g^KZ#u~@|WRJCXNDAcr%JL=A^A%~%#K1}B zUqDZ~{f^>1vaiMe{<==YEhirHQz!ytoe!cZQypDyK!Ne(Yux7}r;5RjWWMGR5ZS9r zlp%W+c%lN5Ei3)EoygbfWay=Q0ykTv-wT#cD2$8`CJtlM6u#?`IX@9a3!9G5qMy@) z{ae#dV;22Dla0>ZhU~XXKW@~AR1M_L_(WcYo?QOt(TKUc&TV;@#{S~rpTV|7r!+mf zzXQ)z>MEQUkFyiYm$|>|l40rBL-8jjIMQ9(#9e0^^%8fB(G25%WsV;3Upub4AN9Y&pXeN5teCyK`Teg?tpTV651uCE;%IE{ zY?S<>SMF>7*n0dg#^23cOa7n5-=hyO>+t}a!2gfG7)`9- zW-ZsHTl))I{N1saf!FwG8eacN{9PSwFW!JPgur}V%}B7^aG}WI+3!3`f3nk3?VQ`u zpLj+`d%hC?_Y5unQu`-8{6F0O{Xe;V!5>FdScG^(IB}y`NOlZ?y@?@U_TzN?fbZ(I zc_04YYVUy?{=@BUe|+ib1`|))={AHiF$DHj41pS;0Dl}{;|SbDd%idV+48`@0l)Dx zwlm)oK-8Mvs2Z$vn=rpiyx&%y$OsI>-JQ~lvTS0dTuJ6St1r>HbAd{Bw`zja zsEcJ8HhKr6HZV`Z>xF@N`)HMnNyb_Dv9^eckKf1kbti4u+;2(Q@yD0kw!WqOTNBSi z^r7>c6bPK+Ur|7jAkSFz&^g+7aE$-ilvrg&tMe(dG=+>a9WO*p+L$FXFEVG~n_kw* zlv7|#b#=x~(H@8IFgdMWh*q~W7^q&5S&wTQ$mM#K z<@9p~_jxshLMvRp5XC;JFyi*LxlOTS;x?0n^!%l3Aeoue+0p88V8 z{t+H$sL-T<`z4w2Ii(GCOQT%|=YDP);l`#pL0h%6^Z=~u22iE2=GeZ*Gdp^A&6M1} z!Q?p|qQkt$m1kB6EGtX|VCRSPWyOtDdl%FD4={z!r{u@ym|lqaPh<&{c_`wh^Q|L0 z9SAQ?2*IvvHua70&tZ^L`f?wbFe0~UdPd*Er)TQZy@YM_mtWH_Cwfqjz&mJG4vSnm zHpngO__D@<-4Bx%CLahj4(tIQdU60dQNlTF`GeRVp(nET|5(LY%ky$}jNqb{|I7z@ zz&7o_8%*SvQx=>Vxp3SC=bk_Q++cZOblI4x6AQ*%5CvN*K7k5z2-NLckN8p9{{N** zE7vtniS8I*&6|+@J8@OPyvv)WkJk0$tGQybatfNq0lAY4VqZ+@f0X@(_0jrIT{VSg zy-c50U#OtPE{)>^BBjp+y1xV0f1Ema^k{+{~J1oEkR-t~kvEXcUzH02eds;d{&I z6PTeQT>c%r!11*>m^e74yK&h=h${Tr*q$tON9s9;j-hgFLoR%SNbfUK1Np%66)!HP zd0wy$zsm3R9;+z27rcTd;PEbGrCw&({vE;P@5jzM41`Ht4~h6oU3lY|^C-nw-(HkL z(Fb80JPsWgddK(|-v$31OdRcm3`Hou5_i@9Xg)Z&yA9P@;6}-t>kOl-^!R>S`>FHN zgxpQ8G`(_G=j2r6RDu%Q?{g&s6FeAiY)V0Hq$BSOpf{}PcbK*cKfg}rx$rq%#xcm4 z4X;zp)rBqQgY^A6q28<(vG1v0-OGG=^|>7wIkQKnIYMkxOQcs@@C*VxYQQ{(TT4Rz z2f)^V-2-rc$6*m&PWJaU0BCyD*#LmD=sQ8M4r1x$HcDxK9QfL_yH{S1&J+zlRtc&8 z_YXX`W6j3H(4UrfitJD`vE{JHXDVyVIm{XY-idw~RFu#;3U5GADI6c!r84Zo(xc}i zH1(^TLckI0Qp`VJRlbKBSX{tL9uJ_Z^mg4Ofo^Jnw<~Mfda73)b0d) z6*#3xbVMCYG3OT-I$@Q|5l}`SJqC5{bwEut6R1PmkC#54qV>4%h2u~l*aCev=5>I- z;xUbZg@1-A(}bwlw^rP7g|h%#mmKE^UbM;vzbGr(j>w?NQMjXg4s}&?6L#S zB(qZ;zY9Lpbic*>aD1i00o7ehJ57&g7F5j*im!_o9+wzaw)wdDu#(N@HB|DB3p_up zZ0i{1Z8fi9T0rA*v4Nbc_9v!tTB;R z4DT#1cFrE9)s{Uim>h;@={_+Q%B-Y~G-9D^)^aF;U$mA#$g)hx%=A(gnx#AfVia6^ zr`IuB!uH!Qy?`!1u&uX_SF&y@P-<|lrx9DxixEhO|JBZfgW$aIIHU-n zEzYhQP@ES&@G&+<6vBUD<`OjS1qa+0P0m-0Q^MB|$pr>le%^avqC^VU-qJF~;%!lS zvY>+Q|A0;blkpJ^~vooym>=TyA_ZG-KK zLb{$1exF1FBby*Gu2!c8R%XJN@i z0SzBrMLw$3*+HbQn6o9$F3g0;%;VoeT1o7EK7Xu93RfIj!3?%i-rHBvreNj_OpA+_g2_R!l%bFxmfS&%O-i;@qT9SeX8p(5(|Mv2nMaspU|FUC#k|v{~RWq6-Csa>Boaw<)r%p)f|_%v71s z$oiw>96_sVlg6XMu)rbW894JchcsYD+mo)vuo@JeipmSmw!N05U#6)vy{`Gh0R z(9o~g!L(@MtcRtfr^nw`%Ya*vc}?5fe{kzCEEvKQS=%9e>D)3I0!y@NJl{EcBtp?1 zOvs|s{M4{XUV3h7s4x9sI=vt@DxKz;57KS-E0@5#omiljE4a4vrUQ z;ot~G@B+d%Ub4tA0{Y#=hz0Jyj{qp_k1v2y`p-Nr)X#Vtyk>Aq({y^M7L61ENal~_ zl0_$h!E;TZ_Apa1tc)NVMOd3&NhAA<*1kkL2exo5bON;ZB%@uDQ24VNQ3zQ%aX6hna% z-VNry>O3}ynY!C&iR!aTpoiJd>bE(|%fiy7{aA>O)gKq`*{Q+n@A_ zHrq5#3n;nHjRx1Ni*f#UBfSUe9%U|Y=?h!4AND<@l#m?v*TgmzjISzfSvMyyvSXsW zD&FrE4k$V6=5&bcTpf76OZk{V@h<&1aCV4&k{c=D4b$?f`tIyWLkj%wxL3vBkSET^ z8{)6?tY0{h$GbMw6*<-Ai^hE&PF8n?P}VfvCMajdXN32g`@;B+KOH>1oC$br?-UHX zUb??8eFo_^_~@Nw7}RN;PJHJXHc5%0#N#3o>xnH!6pe7M@nEXBm4Nj0s|3=l&23bA zbF*>@&M*>8Sc}hb7I{N%PKISQ26N{)3-rCWU$9tq%P`yO<}2+2Ke$$Zo1Mp*WYbMf z-5HtrJ#Zy+^5|QWHm9?xUo~j)5~urTR9h^KhMiPdIMIplGw~m)?6mqy(o(T+{bi_w z!!+>64USK|3Lb`M{o#H^R!$aK=_n$GvcUN}O93ty0*-!}lS1TJqZ@$VeCBX5fvHfL z_f@PPyz>szF~1?;_{g8putJAqzZy84}I$--}E1H%9z}^A2s1Lr+HGuvvB?EF(c^--M9(UL(5bixRs}}Aw{Q|WgQbouZFhT58ZQU=$ ziIBP!A1=F5!%43KMeKRgYk|EUj@eijpQuH~z2fJYU#F0KmwHRG(s zh$?Q~r7GK(G7l@7CS=kpeCdCXZgsvlccx&c9GHI z2^Xqfr3-&~dRp0~(s`F!C<^n6jhB!_B;G^R((n=WgFP4Ih7b-oC{JWOm8%x02@soGcsnJmYTk77Rx)J@_e#fjWcOys#qIhFMjd$KbHY750^mIj``y2sWr z@vFOSH6cdrc}_2fOzatdH=L-h*uW-KzJcRik@h+r@A_=aeKpi)VeFF)^b(l15L6}2 z))imGzI95Xd%?-^?t$_*#(k3_cxOvuQcip+%_Xkxv6+50r~W{uvmlL!^HXT&+w(E8{2nUeBI9bq%%+`f-T& z;a>!Lo6B|Hrt7wWe?M!Df4Wqdg?}5ti+=*Rz*Ie)yK;OceXcKk zu`higX`g+?#lJW1bn$Nk33E*I)WX~6f64sy59P5(Ssti2k`|^Jq2w&qN0=*f04z>S zF~bkPHVnq&hwbC!BI>lp$+}a1gc};2QZ`Qh%iPd1d&3RgxC7#dR*wL#7Osx<&W)nV zqy|s9wG6?15m^x=<+nEWZD4Dz8FO1cnL1f>X@jU=w2P?bEq613J8iF^e+ffqN?JV> z*OD%J5Jj~vqg%PIJ^tA&?DX@`kI2Zv-^Hq7^kF}Vf8NSx+v1;ywQcz)YHap@AmHI| z-^(-UAF$JV`TP3vb4jDL7wjqg!xl%W-FnC7Jj;$< zXpX6tZ&unJ8+D!0*?D}km6WI*TZ)oE?SsM&%Qv~-p&u4UAGi7K<0x7Zi=#yzj+UhN za^wp3@=<2Y+Ys(5O`%_o3)HPve^xH`?dBN;m4pyGm>I%XNQHBT@O5e$UtdJzO8siP z`1&bWl7+8J$;iUj*{bo=@s*3A+r-!3Qr2d_KZ8u?-IFqSnWCD9qtE-&@A=X%lWv8t z?Dw<(;PP9C#82Y4zvhzKzsGMU{pQDIfHSC*jmt$&j}!m<`0WiLjkztq{hi7G&+*&$ zklX&d`0egMz{A<=f0Id%@};Nx(&v$Gg};X1w%qLU+XHU-Y5ex#ySBq`Z__~&Idyyd z_E|3UWaDU|bNLDXef;+8<1LO3Y40$-#1#I=`E4J>yZKXy*%mg*nj zzn^Iz{x{`a2}kXn!B(HE;hHnpwom^Dn~}BUvb&o6He5E>>d{)A{{8X-@_~_WZ_Ji& zW1hU=muK&0*BJwgd0~Rmq>O zjR1iUMT>Lmzzh;E|8*w)7hn2GU-}8scK$+r_q_J;^{)I-Fykl651sz_@5&Dq=le0Z z{qx!$)XC<}Mb6s*W4qd`|AptZQ_Yy$Vs^R7Z-d$Y_Id4hxBj=u5ARlHP<9e0IFBEn z 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

*Fowu=$nsNWXl1fjqkCE5&bekv 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 T9shfebmoJD^WcEsuLu7R;z}JQ literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/RingBufferTest[1]_include.cmake b/_codeql_build_dir/RingBufferTest[1]_include.cmake new file mode 100644 index 0000000..07fe97a --- /dev/null +++ b/_codeql_build_dir/RingBufferTest[1]_include.cmake @@ -0,0 +1,5 @@ +if(EXISTS "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_tests.cmake") + include("/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest[1]_tests.cmake") +else() + add_test(RingBufferTest_NOT_BUILT RingBufferTest_NOT_BUILT) +endif() diff --git a/_codeql_build_dir/RingBufferTest[1]_tests.cmake b/_codeql_build_dir/RingBufferTest[1]_tests.cmake new file mode 100644 index 0000000..254eddf --- /dev/null +++ b/_codeql_build_dir/RingBufferTest[1]_tests.cmake @@ -0,0 +1,45 @@ +add_test([=[RingBufferTest.Test1]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test1]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test1]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test2]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test2]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test2]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test3]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test3]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test3]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test4]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test4]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test4]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test5]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test5]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test5]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test6IteratorOrder]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test6IteratorOrder]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test6IteratorOrder]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.Test7ArrowOperator]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.Test7ArrowOperator]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.Test7ArrowOperator]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.CopyPreservesWrappedDataForTrivialTypes]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.CopyPreservesWrappedDataForTrivialTypes]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.CopyPreservesWrappedDataForTrivialTypes]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.NoOverwriteWhenFull]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.NoOverwriteWhenFull]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.NoOverwriteWhenFull]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.PopFrontOnEmptyIsNoOp]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.PopFrontOnEmptyIsNoOp]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.PopFrontOnEmptyIsNoOp]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.IteratorOrderAfterWrapAndPop]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.IteratorOrderAfterWrapAndPop]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.IteratorOrderAfterWrapAndPop]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.SelfAssignmentDoesNotCorrupt]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.SelfAssignmentDoesNotCorrupt]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.SelfAssignmentDoesNotCorrupt]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.ClearResetsAfterWrap]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.ClearResetsAfterWrap]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.ClearResetsAfterWrap]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.OverwriteKeepsCapacitySize]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.OverwriteKeepsCapacitySize]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.OverwriteKeepsCapacitySize]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.LargeBufferCopyPreservesOrder]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.LargeBufferCopyPreservesOrder]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.LargeBufferCopyPreservesOrder]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.LargeBufferOverwriteKeepsLastN]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.LargeBufferOverwriteKeepsLastN]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.LargeBufferOverwriteKeepsLastN]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.SingleElementCapacityBehavesCorrectly]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.SingleElementCapacityBehavesCorrectly]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.SingleElementCapacityBehavesCorrectly]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.MoveConstructionTransfersState]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.MoveConstructionTransfersState]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.MoveConstructionTransfersState]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.MoveAssignmentTransfersState]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.MoveAssignmentTransfersState]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.MoveAssignmentTransfersState]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.SwapExchangesBuffers]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.SwapExchangesBuffers]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.SwapExchangesBuffers]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +add_test([=[RingBufferTest.NonMemberSwapWorks]=] /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/RingBufferTest [==[--gtest_filter=RingBufferTest.NonMemberSwapWorks]==] --gtest_also_run_disabled_tests) +set_tests_properties([=[RingBufferTest.NonMemberSwapWorks]=] PROPERTIES WORKING_DIRECTORY /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir SKIP_REGULAR_EXPRESSION [==[\[ SKIPPED \]]==]) +set( RingBufferTest_TESTS RingBufferTest.Test1 RingBufferTest.Test2 RingBufferTest.Test3 RingBufferTest.Test4 RingBufferTest.Test5 RingBufferTest.Test6IteratorOrder RingBufferTest.Test7ArrowOperator RingBufferTest.CopyPreservesWrappedDataForTrivialTypes RingBufferTest.IteratorsFromDifferentBuffersAreNotEqual RingBufferTest.NoOverwriteWhenFull RingBufferTest.PopFrontOnEmptyIsNoOp RingBufferTest.IteratorOrderAfterWrapAndPop RingBufferTest.SelfAssignmentDoesNotCorrupt RingBufferTest.ClearResetsAfterWrap RingBufferTest.OverwriteKeepsCapacitySize RingBufferTest.LargeBufferCopyPreservesOrder RingBufferTest.LargeBufferOverwriteKeepsLastN RingBufferTest.SingleElementCapacityBehavesCorrectly RingBufferTest.MoveConstructionTransfersState RingBufferTest.MoveAssignmentTransfersState RingBufferTest.SwapExchangesBuffers RingBufferTest.NonMemberSwapWorks) diff --git a/_codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/_codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +8 diff --git a/_codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake b/_codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake new file mode 100644 index 0000000..a8a6906 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src +# Build directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs("googlemock") diff --git a/_codeql_build_dir/_deps/googletest-build/Makefile b/_codeql_build_dir/_deps/googletest-build/Makefile new file mode 100644 index 0000000..41f62a9 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/Makefile @@ -0,0 +1,203 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/local/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build//CMakeFiles/progress.marks + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/_codeql_build_dir/_deps/googletest-build/cmake_install.cmake b/_codeql_build_dir/_deps/googletest-build/cmake_install.cmake new file mode 100644 index 0000000..bf95d83 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/cmake_install.cmake @@ -0,0 +1,56 @@ +# Install script for directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Release") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set path to fallback-tool for dependency-resolution. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake") + +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake new file mode 100644 index 0000000..87e9e97 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-all.cc" "_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o" "gcc" "_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make new file mode 100644 index 0000000..a6fa3f2 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make @@ -0,0 +1,117 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# Include any dependencies generated for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make + +# Include the progress variables for this target. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make + +# Include the compile flags for this target's objects. +include _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen: +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/codegen + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: _deps/googletest-src/googlemock/src/gmock-all.cc +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o -MF CMakeFiles/gmock.dir/src/gmock-all.cc.o.d -o CMakeFiles/gmock.dir/src/gmock-all.cc.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-all.cc + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gmock.dir/src/gmock-all.cc.i" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-all.cc > CMakeFiles/gmock.dir/src/gmock-all.cc.i + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gmock.dir/src/gmock-all.cc.s" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/src/gmock-all.cc -o CMakeFiles/gmock.dir/src/gmock-all.cc.s + +# Object files for target gmock +gmock_OBJECTS = \ +"CMakeFiles/gmock.dir/src/gmock-all.cc.o" + +# External object files for target gmock +gmock_EXTERNAL_OBJECTS = + +lib/libgmock.a: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o +lib/libgmock.a: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make +lib/libgmock.a: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgmock.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gmock.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build: lib/libgmock.a +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/clean + +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake new file mode 100644 index 0000000..ebe1b2d --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgmock.pdb" + "../../../lib/libgmock.a" + "CMakeFiles/gmock.dir/src/gmock-all.cc.o" + "CMakeFiles/gmock.dir/src/gmock-all.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gmock.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..541729e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgmock.a" +) diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make new file mode 100644 index 0000000..c777df5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gmock. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts new file mode 100644 index 0000000..adc68d1 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gmock. diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make new file mode 100644 index 0000000..7a05e2f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gmock. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make new file mode 100644 index 0000000..8a82b37 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt new file mode 100644 index 0000000..79d0053 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgmock.a "CMakeFiles/gmock.dir/src/gmock-all.cc.o" +/usr/bin/ranlib ../../../lib/libgmock.a diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make new file mode 100644 index 0000000..8c8fb6f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 3 +CMAKE_PROGRESS_2 = 4 + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..0e34c283c8fbf89fb83816004365ef348e75dec1 GIT binary patch literal 231792 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 LGxz CMakeFiles/gmock_main.dir/src/gmock_main.cc.i + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gmock_main.dir/src/gmock_main.cc.s" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/src/gmock_main.cc -o CMakeFiles/gmock_main.dir/src/gmock_main.cc.s + +# Object files for target gmock_main +gmock_main_OBJECTS = \ +"CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + +# External object files for target gmock_main +gmock_main_EXTERNAL_OBJECTS = + +lib/libgmock_main.a: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +lib/libgmock_main.a: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make +lib/libgmock_main.a: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgmock_main.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock_main.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gmock_main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build: lib/libgmock_main.a +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock_main.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/clean + +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..91d0b2d --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgmock_main.pdb" + "../../../lib/libgmock_main.a" + "CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + "CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gmock_main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..1c127c0 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgmock_main.a" +) diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make new file mode 100644 index 0000000..0809414 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gmock_main. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts new file mode 100644 index 0000000..85535ac --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gmock_main. diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make new file mode 100644 index 0000000..4a18b61 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gmock_main. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make new file mode 100644 index 0000000..39e551b --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt new file mode 100644 index 0000000..fc26c30 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgmock_main.a CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +/usr/bin/ranlib ../../../lib/libgmock_main.a diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make new file mode 100644 index 0000000..3a86673 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 5 +CMAKE_PROGRESS_2 = 6 + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..2af26d69e361e2eb439a46f4b9593ee2447e024d GIT binary patch literal 2096 zcmbu9L2DC16o4mfwN+{w#e-1MRSR0MLpF&qD3+BHlVB~OX%Y0WY}ReMG`kyiC#5Z7 z4?X2j=}++}o&*K`0iMN!haLox-bASHZRRE0CAsK>+4tTz@6F84yqVqN;-is7f{`TH zJnMTz8EcL8Z7no4HpP-`x$U~P+fW?Cc5lrpYrf|w4aYM#bR^s~&-U}sI-0ujyY}un zSmn-9dH)Ww^4^bB=jF^~dH(^rhauZX(D@oVUDEl~)q5XP&p)uz!ooe})@r@&ingL= zd6uW=^6k*gyvpQwIyWmZ4##l$DQKslm6lf72xIS&jY31Y*i|gCv&<4(sl@c;_{0Hh z#AV>vP|ElzCR2MOwWQ)EQxB69NCpb-;TZdMJg9RtT*b+rsnCsVvh2on;kx6Z0=N(v zCtMq_JhVaa+7SMF2!At#e;LBri9=_6aUsq0XEl*gZ7&04L zuRgA2^(KtAbXQn`fXY;J6_~H&d5xy^1nRO_wX0P#8c|qV)siJDZXgWTw2GSp zW3o{2(AC>xsH3ok{v3DZD)=bKPeUUkK&BaAxZu(4gePL{B?1miCZVK80~0>*t09gI|Y0bHwTa0~)s_@don z-1HpBav{t0gvH?^%|VyBA^nEi<}KfA!O3mQbZcE-^9{%9t>-_DX~@UBg?k$nE$T$< z_*-@j`jFARr%;WIn2zV)gnm4yf6c!Qxj1G9T2wUY+=xQ3>4l+nU>w@<|8D_9p?9F` z_3M=U`(R-0XauA#$R9e8{v>F8D{1~qk}rYA`P0%T^;R1Ae^H@zlYR=FWJlw^N1ccr zk8MC7-k%dS4*sFcQKTkC>nDE~3>-6_KOrY7P@vTD{2kzf_V2UYKiVhUKfIrmPkhka uIF%;nr*)hIhV#Vp@hyng9w1hhKlBrwh{$1kZ5%iT@%1 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d new file mode 100644 index 0000000..1195db5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o.d @@ -0,0 +1,336 @@ +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/src/gmock_main.cc \ + /usr/include/stdc-predef.h /usr/include/c++/13/iostream \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h /usr/include/c++/13/ostream \ + /usr/include/c++/13/ios /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/stringfwd.h \ + /usr/include/c++/13/bits/memoryfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/13/exception /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/typeinfo /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/new /usr/include/c++/13/bits/move.h \ + /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/bits/ptr_traits.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/bits/refwrap.h /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/bits/basic_string.h \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/stl_construct.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \ + /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/istream \ + /usr/include/c++/13/bits/istream.tcc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h \ + /usr/include/c++/13/algorithm /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h \ + /usr/include/c++/13/bits/stl_tempbuf.h \ + /usr/include/c++/13/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/functional \ + /usr/include/c++/13/bits/std_function.h \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/vector \ + /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/memory \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/unique_ptr.h \ + /usr/include/c++/13/bits/shared_ptr.h \ + /usr/include/c++/13/bits/shared_ptr_base.h \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/ext/concurrence.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h \ + /usr/include/assert.h /usr/include/c++/13/stdlib.h \ + /usr/include/c++/13/cstdint \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/string.h /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ + /usr/include/c++/13/limits /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/unistd-decl.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/gmock-pp.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-spec-builders.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h \ + /usr/include/c++/13/cmath /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h \ + /usr/include/x86_64-linux-gnu/bits/iscanonical.h \ + /usr/include/c++/13/bits/specfun.h /usr/include/c++/13/tr1/gamma.tcc \ + /usr/include/c++/13/tr1/special_function_util.h \ + /usr/include/c++/13/tr1/bessel_function.tcc \ + /usr/include/c++/13/tr1/beta_function.tcc \ + /usr/include/c++/13/tr1/ell_integral.tcc \ + /usr/include/c++/13/tr1/exp_integral.tcc \ + /usr/include/c++/13/tr1/hypergeometric.tcc \ + /usr/include/c++/13/tr1/legendre_function.tcc \ + /usr/include/c++/13/tr1/modified_bessel_func.tcc \ + /usr/include/c++/13/tr1/poly_hermite.tcc \ + /usr/include/c++/13/tr1/poly_laguerre.tcc \ + /usr/include/c++/13/tr1/riemann_zeta.tcc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-matchers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-actions.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-more-matchers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-nice-strict.h diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CMakeFiles/progress.marks @@ -0,0 +1 @@ +8 diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake new file mode 100644 index 0000000..1221722 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock +# Build directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs("../googletest") diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/Makefile b/_codeql_build_dir/_deps/googletest-build/googlemock/Makefile new file mode 100644 index 0000000..814e27b --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/Makefile @@ -0,0 +1,287 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/local/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock//CMakeFiles/progress.marks + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule + +# Convenience name for target. +gmock: _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/rule +.PHONY : gmock + +# fast build rule for target. +gmock/fast: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build +.PHONY : gmock/fast + +# Convenience name for target. +_deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule +.PHONY : _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule + +# Convenience name for target. +gmock_main: _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/rule +.PHONY : gmock_main + +# fast build rule for target. +gmock_main/fast: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build +.PHONY : gmock_main/fast + +src/gmock-all.o: src/gmock-all.cc.o +.PHONY : src/gmock-all.o + +# target to build an object file +src/gmock-all.cc.o: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o +.PHONY : src/gmock-all.cc.o + +src/gmock-all.i: src/gmock-all.cc.i +.PHONY : src/gmock-all.i + +# target to preprocess a source file +src/gmock-all.cc.i: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.i +.PHONY : src/gmock-all.cc.i + +src/gmock-all.s: src/gmock-all.cc.s +.PHONY : src/gmock-all.s + +# target to generate assembly for a file +src/gmock-all.cc.s: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.s +.PHONY : src/gmock-all.cc.s + +src/gmock_main.o: src/gmock_main.cc.o +.PHONY : src/gmock_main.o + +# target to build an object file +src/gmock_main.cc.o: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +.PHONY : src/gmock_main.cc.o + +src/gmock_main.i: src/gmock_main.cc.i +.PHONY : src/gmock_main.i + +# target to preprocess a source file +src/gmock_main.cc.i: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.i +.PHONY : src/gmock_main.cc.i + +src/gmock_main.s: src/gmock_main.cc.s +.PHONY : src/gmock_main.s + +# target to generate assembly for a file +src/gmock_main.cc.s: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(MAKE) $(MAKESILENT) -f _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/build.make _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.s +.PHONY : src/gmock_main.cc.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... gmock" + @echo "... gmock_main" + @echo "... src/gmock-all.o" + @echo "... src/gmock-all.i" + @echo "... src/gmock-all.s" + @echo "... src/gmock_main.o" + @echo "... src/gmock_main.i" + @echo "... src/gmock_main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake b/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake new file mode 100644 index 0000000..fba9bc1 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googlemock/cmake_install.cmake @@ -0,0 +1,76 @@ +# Install script for directory: /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Release") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set path to fallback-tool for dependency-resolution. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include" TYPE DIRECTORY FILES "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googlemock/include/") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/lib/libgmock.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/lib/libgmock_main.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/cmake_install.cmake") + +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googlemock/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..5d15b7f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/runner/work/RingBufferCpp/RingBufferCpp") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake new file mode 100644 index 0000000..5cfcc7a --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets-release.cmake @@ -0,0 +1,49 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "GTest::gtest" for configuration "Release" +set_property(TARGET GTest::gtest APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gtest PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libgtest.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gtest ) +list(APPEND _cmake_import_check_files_for_GTest::gtest "${_IMPORT_PREFIX}/lib/libgtest.a" ) + +# Import target "GTest::gtest_main" for configuration "Release" +set_property(TARGET GTest::gtest_main APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gtest_main PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libgtest_main.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gtest_main ) +list(APPEND _cmake_import_check_files_for_GTest::gtest_main "${_IMPORT_PREFIX}/lib/libgtest_main.a" ) + +# Import target "GTest::gmock" for configuration "Release" +set_property(TARGET GTest::gmock APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gmock PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libgmock.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gmock ) +list(APPEND _cmake_import_check_files_for_GTest::gmock "${_IMPORT_PREFIX}/lib/libgmock.a" ) + +# Import target "GTest::gmock_main" for configuration "Release" +set_property(TARGET GTest::gmock_main APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(GTest::gmock_main PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libgmock_main.a" + ) + +list(APPEND _cmake_import_check_targets GTest::gmock_main ) +list(APPEND _cmake_import_check_files_for_GTest::gmock_main "${_IMPORT_PREFIX}/lib/libgmock_main.a" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake new file mode 100644 index 0000000..d83ac3e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/Export/0c08b8e77dd885bfe55a19a9659d9fc1/GTestTargets.cmake @@ -0,0 +1,139 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.12 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.12") + message(FATAL_ERROR "CMake >= 2.8.12 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.12...3.29) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target GTest::gtest +add_library(GTest::gtest STATIC IMPORTED) + +set_target_properties(GTest::gtest PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gtest_main +add_library(GTest::gtest_main STATIC IMPORTED) + +set_target_properties(GTest::gtest_main PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads;GTest::gtest" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gmock +add_library(GTest::gmock STATIC IMPORTED) + +set_target_properties(GTest::gmock PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads;GTest::gtest" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gmock_main +add_library(GTest::gmock_main STATIC IMPORTED) + +set_target_properties(GTest::gmock_main PROPERTIES + INTERFACE_COMPILE_FEATURES "cxx_std_11" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "Threads::Threads;GTest::gmock" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/GTestTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + if(CMAKE_VERSION VERSION_LESS "3.28" + OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target} + OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}") + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + endif() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake new file mode 100644 index 0000000..2d52223 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc" "_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o" "gcc" "_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make new file mode 100644 index 0000000..90e4560 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make @@ -0,0 +1,117 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# Include any dependencies generated for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make + +# Include the progress variables for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make + +# Include the compile flags for this target's objects. +include _deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen: +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/codegen + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: _deps/googletest-src/googletest/src/gtest-all.cc +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o -MF CMakeFiles/gtest.dir/src/gtest-all.cc.o.d -o CMakeFiles/gtest.dir/src/gtest-all.cc.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gtest.dir/src/gtest-all.cc.i" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc > CMakeFiles/gtest.dir/src/gtest-all.cc.i + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gtest.dir/src/gtest-all.cc.s" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc -o CMakeFiles/gtest.dir/src/gtest-all.cc.s + +# Object files for target gtest +gtest_OBJECTS = \ +"CMakeFiles/gtest.dir/src/gtest-all.cc.o" + +# External object files for target gtest +gtest_EXTERNAL_OBJECTS = + +lib/libgtest.a: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o +lib/libgtest.a: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build.make +lib/libgtest.a: _deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgtest.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/build: lib/libgtest.a +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/build + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/clean + +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake new file mode 100644 index 0000000..82336bb --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgtest.pdb" + "../../../lib/libgtest.a" + "CMakeFiles/gtest.dir/src/gtest-all.cc.o" + "CMakeFiles/gtest.dir/src/gtest-all.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gtest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..e2ada84 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgtest.a" +) diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make new file mode 100644 index 0000000..71b2ee6 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gtest. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts new file mode 100644 index 0000000..32ab1fb --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gtest. diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make new file mode 100644 index 0000000..37ac348 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gtest. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make new file mode 100644 index 0000000..d659dee --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -I/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt new file mode 100644 index 0000000..f259488 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgtest.a "CMakeFiles/gtest.dir/src/gtest-all.cc.o" +/usr/bin/ranlib ../../../lib/libgtest.a diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make new file mode 100644 index 0000000..72bb7dd --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 7 +CMAKE_PROGRESS_2 = 8 + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..c4c45bb5e96ba3417c50715c1a92b74f44045267 GIT binary patch literal 879656 zcmeFa3w)Ht^*6ptqAWK0M8%p~t+8Dz@luj{V+C~=5}1`Inidc&ptM?wRV#&E!OA7D zyPC(RtMS&Gy=Z^6)!yp`6%}%UB-pBmRZyznJ?nzt1q1~0e$ScnJp1fsgLwPDzrKI@ zu$g)0nP)C%&YU@O&Y3gw>&%h;{QeT3{PX+H@cEqwPuM-H%zX-TEbM!-WMv8Et-~J* zM@l$KLM35T!m}hCEukr4y@Y2=c#eb(5`II%Z%Q~u!m$#Llki*#$4fXt!t*5jmV^@} zoFw673D1}C0tu%`_-zTlBjJS-UL@gnC7deZ_avMq;l&buU&2ceUV~qgJYR}1h2Pck zd>O(8_$`#@A4qt)gwrMbp@cIK-hkhY@;npa_4qZ*a|~euzob0J5vK9GPM)toXyJFQ zJkLUC_*Dq!NPIrRM*P;x^GyhE#_tyVej;hVMEEO-{~F;6g#RP)-yysMzdP}}OVWOi@DCFIBf>x7_W*tmO4^?h{sq59_}wpQe?|B= z{O-o@9!dK&VZClIcb_>%}%N&G2<|CadE2%nMoYJ_X>dmg_RB<)#*&*8TgzyCz7N8EB_2RHK;oZ6SSIoP5gs6M17W$u4@7v7#1BR|P~wLm{Jg{u zMOY#6FCaWj;$K8~IDSXq_a#X?5@98NN8$HnNed!8TH;?tc#OoW5FRV>;}M=9@xchI zCH{4UCrbQegr`V+2*QxWPeV9V;=>T0F7Y!Eo+|T7-2HABk|3#1+D* z#784EC0>v4Y>A(PutDPAK=@6Gk3l$A;^PpWEAjCNCrJD}gx`|*M1+$hem=qrBt8Y< zwA0LHJjR{|({aCH@bDcT4;pg!fAPK7@-Tem}woB>o`6#S(uA z;lmPt1mO~iFGbiQ@m7Rw5^qPiOybKCc1XMvVVA^LAbeEf|3vsNi9d$$afv^HaHYhb zM7T=gt0i0`;j;*zllWQ*|AX*(iN7G>I)v*b{-T60A$(cluSobR!q+7Jx`f>bGZKG8 z!YslK65lA{n+P{ae6xgaA$(in?@0JA!YvZtD&czww@G}vggX$vFY%oc?n1a*;yn`j zz`+q0$D~)n5`?7^-$%lI5%!mOK*9kC_mlYNBrHR?zr+ua&_Gx&@dG712;spJA1L7= z2tP0JLnW+0_yvg{CgB$m9xm}CB>WP>BPCub;ZX>`Eb*^M7({rq#J?)xF$f1qyh_4j z5gsS;<0U)+;nyTSSi)+AH4^{2geM|AN#Z9?WK2*YC2v3)ISi%Ux z;SwJqVJ*TsiI0?U6hbBOsDx)B94&EE!g_>fOZ*%O8xVd&;@^~T48pMzA1C3t2**o& zf`sQG{FcNgN;nDOWQm_I;ROh%Nc`Ipeh1-&62C~o?;@Nk@$X4E4dKNS|GtEmAiPxK zmm&Ot#4krUUE)7PI78wy5ym7QM|g$AXCa&|@hcJjNa9x^oFnnM2-%9*{5dKc$cOd+|#Q%WsPKn=z@Q)Jz6T&}B{4WUq zD)GM|{JX^ef$(mL--Ga8iQk8Ck;Lyu_<+P8M7UVu4iGU+}mdsMZu&lys)RfW1@Cm2W8V!qhrjf)pjme|3K zixU)y@7K6^0YZP`g&vh?38+wOe2ujkrR9oirtyD(92$ zhp6Mwrq*pG?ViGoBg6P&L&ZhPEicnTANwc=!|hZb=k*NBf}Q=WctY@az-Dk&W~M?MQ7jQsaAi zdNSwZ55co>e!v$S85uiHS-Zw4dwjVHjjxCu8@1l8S*z?}&zaV1D$x#T^zUf^JjUTy zSD~s_68u%Dea6~}lOvO4eDX#c{r<4!SANRn5BZeK$3*#5;RCe$RLfVNa{1FfM)^QU zLD5k_!3%(b?W*3&S zlux<*342ri*^#jy5&q3Y*rlFHEhbxq|x@W!9&fIDY`uvIKFIbNw z<0I!rt!D`MTL>6C1^B70v05`d>{MmFpFIHW2siEuT=5k%^gj5DMMDYp)-GP?QZ2Cz zUha3r^Z2`e?D-rFBIidgXs>B8L)|k^R%zvr7>mZ1^(0qac}e4r)+<&w?pQbLhble2 zUo^C3#tOVFEladC4m)$!Bg)#0k7oSSwBB265X|+;%+&$tNX{*>`qe~bbz+T+Or|<{ zfpz!+Wp!nKgmu(;PS2KIm* zKBuv9JF0j_CzzmrI@k&*deE^-9 zuNJ&d!F&S|>gxma$Ea`DquM@|`NPOqmEH$0d>UQs%PT~_I*v;qTnW#M}SdO_8J2Yy?f|bfzr>b5cvLJ)z)2l#k3g`tTjY)?-@Dx2$ z+2>;7oT5UVDm|h+cDf2}j!jTj9CM`}*~a1J7z$BOPwaAK4OQ0Ya@9E^KuzxG4;GY} zK4~XD25X3qtf0MiZh*+Mf)~^)zta2&)}t|2g-UcGo8^zKj--ESwm`8QCGgmbU@jG#s?eGV1ME{;nq9i zZ&)h}>B%0y*WCUdzsFcsz3mcq>nXsvycd6N4Gg09#;oDWK9j%@uaWK@9@Jo%3@{L_ zs`WDO!vW}W9#4WJK)5=4ShKQTt68OiXw@;$?b4vKXncu}74YhEv%lxZy#2|4TYG7I zK8g8)143&wd_4?!`gMcA2c{KhpKIqwrY5zV=N_+kwOq3y*FR}fVjYxXBU*LRI z0B26ph)KEm2lh*;iF`zXF^_q!Q(U#l8ev z6kS`jTicQ_+KLIUt4?i-)D%`qI&5{OGH&J&cM^5zqwh%rFt)Aet zctWle`>MTw+#&gplXU=a>$^W6tG?bnot^7xv+NR0`xu2Kyb9z7gp)xYP0s=8wO&wG zn;rtI+ry9X+r|6R5P4Qx<>YbY4a6^)ItLgiVhJTb2=&u7t2EAS0&Y}rC8R#|nbuZi zZQ|$p)GJ1E8n)PHrAxn3Yb^RoUCl-_eL6A$H9$QgjXS>_I~jkEiO2a{Dc$*=nZD4Z zU?4VF!Acf;WT%|EpOihmS~r5r)X9)6)aveOwn6iW#`TY)n7ZUEMw1_H zN74Hm*Q`bomhWZJ3rnvt{oBsySzpks%teI$8Z1szGsGGcrVT5SM%+bVzJW#3d_~eW z(86C(?;51J>kT?EDSlXCmiu%T@Wl~h$-C*1>l53~pEb~J`A_iL<+tlt?}6cAkUAyV z;qF@d(tY$OgDEEXyi0lPhHmA5!yaCdSbyLCfiN`b!*iLy>vq>#_>7kd$R=Xn12-A5 zcJh!wB2ykA#j-E+?k;Kp+J_>&1IziaPNE_YnigVN_CdG*z^{xS-H~#)qFfILJhfT# zzgwj=*@F-+bD2PA!sP&0TMQrTG07%HjQc11>S|t@nt1=q@vnKCi_iJfXkwYaKJ;#^ zW`uG7r0@DDV{A3|57A@d!-^H1eN@ZKNRG6LGeC&MBB}yT_nLKp7|H>nEcY~6%D=J*x?WlYl_nHPt1XgNT_o-BB5A}FJJ=#%$Y`dRJK=yPvz~C#r7!6bjEhx7 zr!?#`ODRL*{Ymkc3yZr0ZwU8@zW`=w$XlBT+LE=_p5wt$F7$&iv;i18=a7o}&}&9= z9x9L_17qx)^>gF?_XSmrIjPPb7OdGAN%VXXqV)^_uwH$Zg~z5V^p z|4;F;*}+G>AAppsb5sCh2!3FjvJUMSRSt1Mqx%@!RPkI(q%Qp^GRcc!d#vcy4mmDn&LPu8H&q4cP78eKCT z3s%$a6}rL7+~5OB*$ec#w9Rj%z61hiEb7-(8>}|1&B~e-9Mn--fsT$14l=E6(c_R` z@y0o{(pX4#k=Qj0z~=-j&Cq+X189(QyHwiGTF))n4{*YG>8#drx2(jrGUMt|C};8h z1W7%Moid|#JtSSbdW_^x=p|8qt6NpAQK4szg=gU-2&w`7XHAQ?^8V+bfQ2NkRgriF zn;%GlA!plW7*`(&XeoOR+72jGxbhN$1f*1GFS1gj?UV4~bJCwlNX4tl%oflMcf6qH zG?K((L28!AeVV@c5G?JI2)zNgg8Re_0ZK}1Kh{|&FsP!s60i|y% zHLebEscWVhn^xd`Kb1adIkj0;b*R?Y_ErAfvd^@KPp`GVj%;hyf;KW7HmV>5Y+YX& z9ne8z6fmumg0=SDm8jA@YK=KybFDq2*=mWlzE+6`79IdzrJ%%Dv`sa3bg9rY@joJ^ zb*eFQO<=0AyUTef)erN!wzikVW~#)?JAw7j>sCFdT3;$v{?#?B5@(heH@Ep$s`U8j zW~eQ8R^l{DFcz(%w4bg={%B}r?8L-Uik8IAKw<;UD&XDD$%Vkt#S zVnIyF>rTRyj3nCpnd1<_{sqJ~`-p_t`0?{_`NEGYGWgnJ-M(*WyevZrY)}~a8G8D?8#aZN4BG6GblC!Vpt)Gxz8c8yq)r_uVRFT*)$h5zU9zr~2;B7rV z#S?gMnii~F1jU6$0o0UC{0SwYxtmY{U51g|O``)TXgw8vD?!j6#UwhwACMA7iXR0#fiFo31p)N| zQ4C|RZ)Hu>-~K1_7ELMCsZb{{)sbu$*6D~VsH^$yg8rl8;fzBiRg0_ngr5LTYfo8(Q5xV&PT<#9#VWh&ur8O`_ z3C|nc(I6%UTvksZW5A<|3+#c)>L_QL!axW3^=!@7sMX>i9hZg9k};cy+LK(2Fp3PhUBqJ} zGB3URE^#OrHV?(3lPpZJv~hw%`G|pLn7fqk2&90bXsY%{^uONzfu@^J@xxqA6Hh_5 zsC^F8yV1Sq9dz_W?^Jp=FfvE)F#ACPh1`MoO-G6HB*gDNlt~l^p9%5Hkt)jVkSZdo zOa=dn#HjTIYhXbH!zMIUx=5EI(svH1NxF81X=O8C00q+PAV_T(ebiqO-Q~}@ZO-JN zuYOx^y_wkz3?NJ=8W+a8xu=h4h|kd!@)!8b<=;Wv@cCTyP)H;m^6C^yXA7+)E&zMZ z%mS_(TL=OV5oT^@AK*dV`%&G2On-b9#iR`rp=`(}l(}h5IW#FPMnyH`3#jO=nu>x_ z)HQgiXs%F~#%j%>m%i#T@z8XlufvMcSDKy?7RoWTr1^XyS~1+B~y@=qvw0l@5<C&g>uho#PXkIdS3FCBumkb33m$k=*o**LO=Dk3HnJe?LW)6)iF z4_s>vv8F*@Hw~*7HUzh$5Nt-w^lV|pL5r2h4$ooPVMt_$_;^HR)cR6U@!@zQG_6nlrnF5?Qwbx#VCDq8511zQ*v&LQgv{9qrd zd0N_rVlKc$4Dbe`)cKl5lxJ@ce!{vSKtl)7wR7kJCRWQxdg(zGPkTGjZ|YWN2bSuB zFZbb5;y-%GJB!lC$k-*Pp#*JO2RV}fDsO0TEW_D<^Byco0EB!pJ-6JfdRbXy{00F{ z;(cS*N%-rJT>dboV8SQUq6wm~PdCIMztHe34K~%4 zXH(p5ZJ#J;XWB4deaE!F7pV8Yi_wf2H!gSN8FUon0+pWZXHet@aXHLmh-;svLQfet zw$ui?Ey%{`yi3$tV_I*Km^t*+jOu9UalDR({uMTE>I_$Ii~SW`tO)?&<-ulX{fuX= z&CUQ~ren<*3RBHvW0#YOX)KByGanA0HY9#OTeOh$XSu*d&?!9-XE$<9NX^Aun8Z;%ub)I+DRg3V8(bcaO8p&}L)dRO~SHCeHZF4idtH+ToE%Ik?^Gj@n=t+}%bZ5!5%LbZGV*>}T;bfu4|M3JBDxOpV@9 z7L+FiurSjX1sl50T}^Xy7*>fFx=(u=afe8x;{?9$k*`u3w$rb7f6@CoF$c98$-kj0 zq8bp(W0q(tV%jL!YEQPr=hTOG#$Y~G}XUg8KFkr<{5a5`RBktvDpuSIN=`BskaeE&ze;@hn8l5GeTs(jvSu# z?FkJcl#P!F{P?nF6*jXqTQvef?JxnVt(vXeJ5NEZBrR-h{5WBpuUKEFyY1x+nhoUrIXzqBu_BBI1V;fK$$T|*0i|Lx43|IW$JJl`t| zv&`zBXTj^WN9_B(eN78N>$qzkpny)*5c_dxYyTgvPwDY8br+#njau#XRZm567Rm%$brg`>#jnx!u(l}3Kf^cTZ>wfxMq05-DfqKdF;}eD# z7@IB3(}LAk_M&nuEuN(e{1ZvkV7I62eT7ijy!C>x3)0=L_=(t*xCaKH!|xbT4pN2h zToM^SU2jJrSrmLvpXG-V%v#s8GW&0m<1GyU6nfHVTBs~c{uH$(dmE=~{*U|bSa_jO zWNK9ptUYPb>V+?SafEs=qguD0sakg&q^y;ys;iyzgHb<{dhlg1)_OIAnEd7z`W!^6 z5jA5S+lrL-X6T1{%|BxNmNsDxBgR~RPn65j2W^#2-0NiYINXheucYEYDh@@XuUtE% zOH@Oy{i4vvnE+*e&5u{H6w={?_M1gl= zp)v*?ya$-4YF|AmbjW~0*(1T;v?=>+=*e45V+7_Tg4#CXAEH%VGIxNBkf09YDG1B~ zQ&fo=>73>PcXzT+`C(pOD{Ni%WQ~_OHq@*_k6|owHJQnJt>j#$42Bv}7%yA|Tk^}m z3tt$hOKyxUfmvTYlq9f$LD_l>KnIJ=(AzT(8`*SxCElCX%)s!D+DgAKyI96Yc%T(E zt9Yj(%)DKa{g#@c=Rf`jScSE z3-G)SV^2HL{m6(`}t}_8Yiz#&*?vFVg(P2z0WpHZ7!Cc=>h6^ zFhgU5##fsA5TuD59m{HB0}#yPzhMXj1=#ZdLL#z*ay8(s1wwI%(j4JEAU}Y2Pm%!P zDeZCekrdjjVKlKX(#@fTWB}$FIta)(HPB8dK-OcRF4*K<8tfmXonic#%o7+>r~jw~ zc!2ShionCFp|FvPg?RSiFs2sfMX}u|hXEOA1|GKOAx zNRBINQ1;jJ1`+f-YQ5@?5X83=yrmrjgyk3jOHD)OX;IbC}|)a zIxg+sU2h_UqzO@S>}u(w~LJ4^2=on^}q0uJ7&aV zbm%6y-(tpL2b?3j*buu4o;<%x0uSE( zp5FafHz1#;=gDOW6FuZQPtRQN?jA2G_Y&>C;-2&MwBUmsYyyO^?2a0u?D1jspkp(t zs@lL`lC9X2p=XRVXSxucWS*IMDD0xP@N)uuY1P}>Hfkk=fXpt-YS5eB7t{xA8$UtU zvTs2RWo!gSrTaG*6zgffD?|>M_T^~(xsmwinD-`}EvfoL9c99)?k2-~%(KF#B!hEO>K$_7%22=Jm~^WaK77>=lQm=k>rExjgZPABT-+m9bb!_E{?Z4G1$^rmN6)=qEyNL)v9M znSILbFZMf_y9I{G1^$v8{)Xpgvc*V|gIAp59Aerd!Y0{5o{I!+*!Z?PQTA6=o5{ox z6Qxx>h>p=eLmky+vV4_{9mf*6v|wnsX@z6E86_pFkFsj>$6?DEj8&bg^>vs(z6ZNU zdp~?oX!fWEv=RjXT`3FN*H+?t^Qe_-K$m?Mj2>0%i{%0bI7fYrZ^SWXaVfc84WB7P3Msj6LCFV^piG5F{ zf3hA0P|7KZB@``*eG7?>&ErvtCEDh(9*K_4V_9Me+dRhM)W8qU|2Hj|OXWBl>z?Y(`#2DW?ID)s{xExu~~C4v~7|KSPI$ojXlNshJq4h5F(CXMBGM*n6o`DVt;G;9~b)hVeoLx zUf|&~8V_9rB*b$uj!-SKwX-DlqiEvwooA&7?gHq1X4MYD%c%cJm`Eo=8VjT8ZvZB% zVhtYi+i3cR^~fJZaww8`km4n=kx13JxGMG)q-tawf>e!+t77{jH4huF?|}(PW;mGN z96l1>-6we0POYE@#E)VUgbIyR3~(|xfwu$l|*x5Oqx z(5TOUL_;lmcm9Kn!=b_eGGBr7A8Xz7A7|hp|@hNaQ$cY294KJ4yH-=o|=uG z5_&_>o&SBqk9bsfo&$cndcn`8Mi+sfR`U}K_t)@l0bSTjIKJBl9KT)&$9do-+5;?a z0LbEnAj5t>2d@`!?oZ%#BEjn}y}o+Jq29iQh5%&dt_+>P-81+!zB0RL&%#nSN-uRY zKiX1v=7(SExc$B9%%os9+4;+YhkchB?B3Igw;80QHrSoB^Ixs){6FfF_ibA8`iZT- zUh>YylGiT=FE{RzH%u>i{dghsta?Gc>bdC!3!hHsg-`ewqAz~{ePO%(Y*OUkpN&V3 z1>y1V_Zkm>vGMTtF&=Ju!FcHO4<3(EVfe2c0!>@##Vy1%6zbbXO~CsGyx%uZx{h&W z`ku2tbVMg4HzE7OrQ0xJnTR^_E3&DW4aqn;0ULpE#1JzLvnXrCAjGFYcrqRF29-`U z;!89AKTQ9v5!k0B?nH`8|A|-?WhMB9SYKIeoo6iC2d{kB9!-BCGG+6cju92UsaA=+ zLuxg>Z5n~2IU^uu9YPr=P*TT;DHNa0ajqSYiQDKA|2nvKN?D^5kg}d)EUQyisW#}R zLfxK1#URP~EptxM^-Q%!C@*jvfrQgoC*$i)Z2!htixmYqz*OT0+R9ZJ@Vhau?I;We0axCJO9RQEu`eS+h#DocE=)dQ zAi_fMXEba@tPdGtB)Igx`vi?hon~xC{Sc;k+NNwan{{wpj0x}Lb~-{ESFqEU5h1p| zG>1OG@ln3XDa1Igp&^eZE2Rqdj}aW6VhqXI7DH^C8(6xlLk5;CLj`=Mo~iC|79ZFg zxc6pUVPTv%I1WUc8B!lKu=z;wsSWI=4>_>*RYcqxsS7gj9M8!u`WkRYK#YM8VBp!W zRsQf6S`=e0Zdy`~nzTf=kNI1(Dz$a?SK(nv)_f=EzJOujEzSdr!Tj2Zx=BDS}9Q;j!!mX{gHKcPrfC^Hjz)FV_MYG2R69n?;$ zeI#l}>6IwG+L6YgDrZ8&V<73>G3MV#!7#GyEsuJHit0>l!(aLrO)L+n&Qt)srhf#2 zR0;9Su9S)o8O#1j%cbajhTJy_9JKt(NL`4e?5~6$!zkOc6sh8?-Xg29)}DTF&1WQe zUZqy>ZV*S2u%NZ6#P+f)=0FGqwv<;IWf6y}*WA`jKg5rq#zAI-gQaibu@$?5@~OtZ zp%J`%CBmnSjc=G#@1oSGKAQL%iLxvp9~JU64@GsQPp8 zHV*F%{++{zc~hRJ+aV+CbTU|u5$-GvmLnU>4cQzJn)=deNhudr2m;Y$2htjuyMQ&~ z&+$O~$_{6rngey!0yjQRX`V|p!OGG9Idp;4G(;g zoFx0qX+e$Djr8GyWdtja@(g$;<>*4Wd@eG(#L=Inc_unb16dz@g~rZPeMD46wbpyJ z_7K?Ha|ty)bue;HwSbhMwd1m?qwA&XMi%Ef*S=8$V z*=Azs1MDTy)qnCtF_PzC?1&ga@s_i$Fsrs}mkmG`XfC!J20H>n4306DQ+=?TAp3*~dGl4z&{}I#tz8|pmbvrwB)C>^=PQcvFrJwKD5cnZ{cODctHz6`9C+UX zJUkgwlCf9PWx;V)2k?WMw`cxtjLvDjLn|YbqwXzC2}f5d`(QVbb1};FU9vt2Rj@xK z-n^iFx1jvKOCf&M(>|}w4J{Y6xdovNb5pqY;NOg~cn{PTu&TVpg%$<$e=N74q%x83kIF5DQ)!Y*8P0C)# z91JN(u`9w$yz|+mzedBFD5~t^pKY8AZN&qQ(YSqI7p0R67nLjl0pr>acXT} zU0T643RbbJXBRpJpG8Y$c!A!1f2qW=6dl)nGN; zQBR6y?I4KPv%m9VV>jv1cnfyJ{c1zo^>7Tg%a&jvxRnx)P)uKRUkA?mST0VDs|i|?Vt0xBWJ{kQjyeG|#!g~_* zx6e}x&8p(wlSofH)}y{vj`yThvC|Vv*W=3)5#x&krB$(`#etHOuEqFJ;U=^XCEzZ` zl}O+5geTUULdUvK*hc;f&Z#8N`z~4ImpnEFRGC{1-NgY_V3^+}g+rVl4J-xsZFkG8(NZ@vF1 z&;dI#-LBF0B&`HB$BmW}H(CmAwCsOqdy@5Pz-If0Y)|r9CE~mR0UUBpw4$MZey|?D zqr^xyQaci_0T;@)APQUn0eTU-{6}k6M0o65{aw-YS&+dz7CV=f`>n>J6_j@Edioa0 zXGRi>DXy^rFSI)UvDjDfg4Owq4tSx_;W5(aFQ&Nug3w_y)-|ke8Cu`Odsggh(am3p zVQeN^N5h>NsP_TT$7Sxt3u+{_FJ3OH{>O~eI83?hKj>>bC_H3#@962tnF0*LcbWNw z9EGb!Za-77eqhJXCM!5(J#yd%Ml4ICt&>hVCq3sR^6)kPYvk1`bqjrF zT?oV6tFT$Rq_Uv$T>D`{%O^J-TRwx?Hus z3d3EPgu>C2o_y@`$y%oT%QF`Pnwow;f*DKy=4WwCD2yq^HDrIO7VC7FScO(9V^o_; zAJ6EX{iBGyxln>H_SDYhAhR$%aU#!pOC}@C7;(-AW&ka8iw)=`pbd-uu9>4$={f zn9@JH$|DhAev|x>jKV0wCxMtU3L12d3Sb<3=Nw!j}OvyJU9Y`;7H>)ZGn~X{^`2+ zhWTeb4QVkrN*r#$SyVdP5IauJHO&02_w<5m8jrl$Ca1rA{s3Kco(XY0wz9BjW)9ss zBc%I(?&1N2Z<-e)kF6pPfqe^|)e@>ahWnj8R*w@TtAu*5tEx9t`jQfUxA-6`#-f9v z{Oq;wW>HDJ%h@=}$6{EH%QD`ajIZc6M%`0COh4(x3E$}wJMSclmuE-j&7bjVXyN?n$eTX^s#sv}dH#sk zhfE`;JK9Ini|3QjKj%~zA7004d6{E>b?}d|&F=5cM|n0Dh3P1q1UaS zH5Kk5v*aN)&8||&Wx_9o-| zMj|2kJ_L?{4*~A)-uVys-(Q~FU1i^`yW0}Y`4BjQdm&6unto(9cIZrwCr*aT7%8|2?a9qwUf=c(p6~8GJnur* zPu9NsG}^mI5;;5hc{n@Ro@d_;c#h3?+ob7K9$eXf6Zo<-2(CEwLi^OBbo=%UT?|HW zohX2nfy(^u(IR39S^wDn=4 zAml+S8Q(wd_h8z?Y9B%a?XQ8$J8@6#`MkEQk_O!%4PxV}BKsL#{x-LKeugg(?8_W` zp0M3`I89ggS?xn8DbIzxLkp;`Kq;D1tgX28| zDR^_J78CH6Opm7)8}OCz&Q%4tQ681~y1QP)*m)G3Iu&nxy8YJ5pTE}=dYk=uIQuug zeo@&=$)SkCH5P}^J{o>3;2wi7T($nhZ*;8%`&0CiU!t9^zYyL72dFhvucH>WunSC3 zUfScj^Aq1sN5iR~Ead+UA#V-iKMr7ThZ7OlX-!vTErqoLUT1*K zbS7{Pn#K<5VTFPlJFb|YZ=R)KmL=v`=+&O=v0C?Nj|C?-IeRQPvC#Hd5o_2(&{5#V zt<}at5+P0`3$0}$|E2M>w&mbO&ks=VJnwUd?O9Ib*!f)sIRxF_2#vQRfV0|aT2iax zW%d47xe%P#VnyUso#wQTlh;K9Cdrf z!#XwJ{=a5bcx%V}_rr7j#^l9kcmsc z^*3Oon7Qyu=)}bjKE!9_S`?tK2Nlz^-YUh(tYvJ}xXrlY+`_wzNT_R7M0A%mv_s;y~@wefu1HSb99VE0L z4t&iX>b!3Xu!J942@?H(#aOgo1nMSe99`HzMti^{ zc0%QNK>>IFIlz}3r&Q8BLLN-1i-Ovj3@ZUh=|h)6U2`pdR2%dbwdA%1jfy082WFa)tsSM>WU~(brVi9iE=OuVBXu+N zhNu*MS)QSL^tfCG1%m(`!+CGgP||#&Y=9vQ>~V%A@%lE1;%lL#vCTseHOpZIvn`S? z+ZVJhzQ;S6`bP&4wy8Iz`Zb- zjz>?tU~+FI%LkLk>k5Hsf(s@&FyMeQZ`1!4mqm zbEohaP}3%qnTI8_323lYCC^7;+D%|8VRC_PbRUGCh-YRo=GQ7InBt%msKM5gb$B`M zm($k~D6HOOBBLaifd}`GA0bJ^CAs^bNf3q$Vt*A6ZFUJNo zt8^Vm${0*PXmaZ?9Zw|xHXSrDaFdNY?kY(?^=#BW1$JX#2q(c?E^L%4Fb0GTQ;?gU z8@g|zPdu~;C2AEG4RC`yOjA4q41&e&X3w@f!_W$yLTIGz(P12cQn#epqJl|a1JMi^ z^KOb#gVEXwRP7QhPZO%$n`y$iT0xs;=jPCNu!7N`nFTk60Zg08xr!+h2?_QI^2M^ zkk-Q}48Czi883LzD$JTEOn(pV#DlXGa&h>5D$+4J;E&5-85|#DhQK>M&XfjSj2fd> zEB~Y2cg;mlW%;Zo+`-tb6LRwWoE+9VD3m>l^fajE?-bI9oIOh3p@40Fq)%wEb#a=2 z;ulP=4Nh>e%ShdczJUBpDSWXI5BD?H z`w`u(6BJxm(`(Q8lcEk3rUijG$A`ZPTnvx#$AVC)`DB__v=t$OqBm;5<#K>yNN%SP zJCkJtpf|5*L}S|tiE5hZ7)@Bq;V=U1{c5bJ|vdk1e5=E_k=6;@aIUU zk(xjxMbqZO$!J)KjQnFwJZNm$wNix`kM9e*VUtIf4 zLqFXy9-+wuP6YB}K$W&ZU^J%~Ri(l1UARw^R*@-06Q)tVu)v=zJvHwV?p}>tY!}H^ zLc}6f>Zyf~kY81F`e^znOJRg#L8U@(7|B(fLJmF0(s(vhknMIQ^S#Q#B8jIk;haJ~ z!np=~Pn=*VEBgf-?jRtZ!S#2uD|~dP;JWT5Khz@!q{hWlbj=6`KI|?u4eppz`V@DI zFx```!Q`Pqe6`<#Wduv74w+wcVK-Jl1@Pp^VDO+IXsaTJU)LeW-ej<+| zBC=?%FWfY{0xOe|EJuR1%D8{dA-ktqa}M0iE=Ki!j&2T_U16;@?b_3~VG#;#!}hL{ z);ikWRc-e_8m;O|ytECq7z?|As)%FhvQ}W-I>#OuINKU%gr1!7X6Da$XV3Lnt5BRh z=a8MKXJ_W8NaV56xaZ}l_8j-fw~1aA8mlpz92qOeD(LC4afFaU&j@;+mCeP)&QSrp z0X5*u8jcYTzk+cuLYqAo_w){c=00{$8aY7vCPSq5p)qd_)oA5m9yV6I!`?IIy{zvE zRYfqb7CI^-3BWv94}K8lQGchqq-c-m_XIVz7y4ln@4>$q=36_C^JcH@1OL8Qh<|jb zFc1H>11~-T{?Tovec|8li{al5pDzCG4gE{AwA7)2bVpK`O9+Y20%ah~B}xbqM?^74 z4>vM_ap+-joLqrC9~viFrj(D9drb{Bv1e*1eg}vmYB>UMwS048kUtJlCUV$UmG?Bj zd=b1NkQC3fuzwJ??j4Ij&2`kd^Psx>@h|SLN;XiSKo`_Yl&?2aw7s z^$IQR>4D&WNk*deEEU~<`<|Ej=I{Q?-QEAQ5Rn152L@&L4?QQZIK+PRx%+>G*5QxH z?-FxVY!9~i+tgg%gMDJVf4`Qa(fZa0zX1M#`P&=w`P+oUFL?RcU!xe32N;F>vE5jv z^Z0{}Ncaf+!6JOt7k@zarYpNZz7hY5*V1Teb1w$sB7F6c7zo{e5;N>UUhrx252s(` z#o*%mwJ#t~K5gC${QZo7_>6xre(;Ix*Up=+adc1oLmZ?nA4fmqA3#e#;~$`~)pFZB z`K?{QUg?CH%vBxV`+0fB4_WKa6Rd51)M2`|*QtF@g3d1?EEJ z-|6`cn%l%3^ul&Z9@k!zTuOM@Vi-K&xYVL^1Iblz(r9hNQ8AUCSFUf=BIk?xTsGL^ zn{oZ3*I+o_pZtz4tI+1GAFlj{k5Rt1$#x}$V4Cc3chvr6DND0(?0sV6Rd7sh?TQUD zmdqUCC^W&xGei<|eQ-fS)RI_Ou?KMNd`gz=hd0iN20IK9+sfF(&};Rq#5Hf(ySWG# z-o($1(boW4?>jeATkG_wi2ZQnT+Tp-U0Z6l^6jUv4H-A4W-XWH*omNdu(9GKZAS(R zD($%rtg5x#n;zN(%zL+@w^8YA9uPWLN6J4)RL?`Aw6#nz=9W`aim5U>Pz zJ!(OJx$#?=(qa?^CkN}Db6a`+(M%}&5#w_#!zr z{}ok09-Dql5vdr^GW}cXtvJ5CtQ!=j<* zsh8`xiPB5`FcJPBv>OU`2LY^UL{r$Fi?7}A_^Z{bM6cmh{(YH1T>EJHc-$Deqi<3a zmIi^SeRxoz_T#1fIq$|M=`6U_u7npCioL)epv~n`$XcKtc6~f>vt69;WZ^i~#>md) z;Pc;PmwNWsaw5_CH(!+rBd}f2Q@%rG7P-C=hS-iZ8-ocO>|o<*J|h*Ty`kfVWj?8j z5<7OyDpMD(Btxv^fp|?j4%jQ|9TZtu1lZMw*gwL>2!>J2FQAYwC;JDtC)hqi{7hyV zP8P9ASzLqONfFLF?**Gqn%opQU?MGRLlz&L`wHeznpnb$)LS3s4;yAW?xF~cx%a2j zBZB}wa$@_z9~)lMot$J;0JAVC&9&&kNNq$;Oc3SWGc)`n*1#YilF9yypL+x7h}cTvsu$N`4Q9{u;&8V}oU6QSR6@wHJ(da&7EuSQ^V{+_APg z=RFR=m{&Su4w4b}S!=SI>gNvac_E|E59HZTYmd*cv8?rUGa2kc`)gWY4`LFbB)bp_ zVZxp~c3l?86Ho!t^Mkzi4>4&UmrO%Sh1`ik#GZqiY1;P&8!5?tnB|IW zu2XMqsrSEEAKGo)*dDQ7nA*JLG|D1KMZh3SWV$~v8d?@MZd_g)*kU9X;&i_hHgkVp2Taf zKhl(1h$pKxHXxjYFRy1|sg6AG-`$!%yg!bb%?Z}}V-)~g`On{*gM$KNg9-wE8|Surs2Lz@uBq+`RHIY-Hj@Z!;HiA-`kj5LOVvsPqx|3nalPg`4oF-v2t7 zochqth;d^__5i*qcRa>63M%DiY;lMT9j${sS6tzu!W&y_12Bx9gQB9=v*ZsQ#3HZjthK3t^j*VS_zh}lG z$T0Ka@M&kjQxbV>1rW0xybd{yQ2sS;{qdx+2tCMLhtiz=2E&ILAm{t5`Fm<5;6kNl zVE^IfXZ*hl{tRjGE3#FDvLGyTaQ*I%TOf5a zr8-DW$gJ<-ZXo|?(~Q(pJE(t}Mtdyh=m-~z3Paz%1_e0l0(_t`RNmpQU~Q8ixR6*{FB%^TwU=;`Kha9v1P1k6r7rn&F~DIu66dyeJOpcz`T;y@fj{ zxVDKOEWLrXmM7lFxkOkm!?i7_5a!)=yU)x7iNxvCNr_*x)$fef6>PrQ{k{*d-WMkMLMTxX%7MB)45>Ww1c?08uJwEFm4Bu z83QGhl+TO@c%+55W89rBTv2ZV{AocSV{RYo(^J8T3pLfdA3VAq^mV753{rO=j~?S_ zk<@ug@^IvPEYnj6akaW(z3QDq+XqcXaNaLAAWGK1@6m1X7(TH39}Ks%ZYvJAO#5!E zAzqB2b4U(GnCb7j(CXDF#u=x{duV)KzFwv9&PpgG?MK*^An!-0Z#Zl9!F~I|Z~Exl z>mZ5V>G{7Q&hyzzAEMU3YgUo);vJE2m5SmQ%mxttAFxqkLVG9XGEN<0OW^Db!7v6F z4@9y6wLU!;qosGLBo{c(oy)voa<&D0rWPAUy<@csHwDa#y7WJeLpRGRa_3_~_Q9`u z-6l9SX8(|*|21o~5AZznLfo?-!YQpo&~B&UkP3F+bzx5rE`!;hx0QU9x|ZJOXIt03 zkh8_HOc%bHrr#{>{pLFT=8oQPV)~8U`^{ne#zr7!?J25Ea`TCrqZ@(np))al~ zleY&KefwJ}c?+gx?^Z37x5Pj8emhm(K3MdvlDD@OeS56DB|fot$uw5f-wXEmHd6HM zN+`YP+piRT>y*4t(YODWZ)qX}ne!VqF+=(^cRtas8i#BX8>&4!PPUL;Pa@PW@PV~q zavB*N>i%%zk$9szHUg^rTiW4q3+oRt_0G`}kX6?-G4D_oImfLgZyY&%Hx@Pcv-dN` zyX|q$1HomDwVQ4@D0(0fGj>z=96tI5D$hmmbpImQE;`;5fN4!BwqVYDWvaNC5YnCX zygJCV=WU-BH%SVF0QeqjOK!gBt-Q4$v!##(j3%ZHorbNa3xmo$7))@ff{`LYG~h5z z{L+!HStbpXPFqJ^nF3=Q0I%Rk^~r{%nj0ev9hzG${U|D}0u>veZ1_l7hsDn8Jt$&r z$c)Ae@=%$+PCoRO-e`FR93Guajg5@O`DI6Xj6Ql!?(u2wQQ(RCcVApf6XSIHAU8<2 z;)xErYholew99b>btgvEv~c$Q>-3q!uM{3IB}ch4=3;~3aAUIC;rx!A00z!u-G4rU zLNGcQ4hR|C(E;RK4DIu%Jh7L0MTsAP0h{2SBh%a?QF~98yaQ00c=raY_HP4utAp5( z8G3*Qn{=LWe_)F`XU5U|VnKqQWkxMTtQ+g@hn)2j7tbndHLEBb zcZk+g#g}Z5C)+Ho+FmQ z`^C4Aiepm!Dv1cBNRG0k5(PRdc{auLg>@)k9i8Nl*`8=(XE+8|WrdBo1vNX3iQD-N z`7!M$7Hbf!W5~kYrGS*Xjx*w|__#mF#QNP1aHIZ?Xw`Bf^*%~=?huzK^DLQ|h z*I|bH$AmMFdjM36Hb3_i!aKIWZJv?Wylhji{>*epA5ao}63++t>%a|&nv-N52nZ$| zr8RVujh`lU_V9|t`uh@H0c&^#W2;6|8u)3*_WXkS3SSrkt4Cf$_W{!G*wG!S^@vv2 z66d)N=hw?i=}p49Pexlkn)Y8dBbmg@6C#ashxlUqcciEcKPha&q+rlE0cC@;h-)2X z{BQX!V<4>?g+*3$jr5x~biE3<330FjeXf59<7Md#B$*Er|Y9+Wz=Csx@#VmLDj z6TJ&0H&K@dt?@&Z#6b7t-K#l8aHYTfNjzSs3xUgAyv#LTaeDX+l% z^6c9CcY@#G^4=M_=k{@Vk0aAwmUm)wFUmUrnR=H;^jqJ%1c!QOfCVS+NycgM{xrxM zXB_(IOfVXI7UhAQbxfR`Ss6wXIBnBn!VP!Mdf-m*&8zQht_)SmI;X4B)r!8mX6w|% zP+!cT@gWi4)WoovzWA10^{6{If~GaSr#5}``iu1!cVunFseQM8yYwEMNH3_r?jzR! zG2k7>eNlVgUmDgoup)vMz?YPLX7^EN!nPE?$;zk9?i+9~5c4K`PaEaZ*>AJ|l3dt=?!NE`&&*cPEs0OyS**^$fqI<1@()G}4WpAbR z4g9N}eT<9o0F2=YrB@R*8P3VbzXILJ(YmAb;#G804%}c;=X~TKG(B(&N2_oh%1gLh z7dJ2K@t{irj_VKKrll9R&_|yA2(Jeo|0tl9L?E+?3ndRhJ=6tf% zj~$A$`>_Le6ErgYDF>}5_H=mo0@BPZhg!<6J(Z5|*K9L!-Fh^!ew$g?9iQP(@rj7CQ6`PT5k6phiB8%(I?r6=D&l_Qhvvy&bY{b`o#Mj|2RHs^*DF; z)T{-$P^SI8a31*`f@`9n!Fm97M~B`VY(W_NTFu60NKdfHEZ6AZe!>OD01eubMj;y--dan`tvbu;2yOe3e;dqBE+_AS3rIalFb zRiY#RAcV$UTR4@CIroH-Je%g6H4uwM7mO0KR4#eYrtR+8%C2r)(ntlw zu-5*B=bXKW>QwIafm?7<gFg_DXjcQUoz;Tj3>iV=xP7@Oq6`6xbzWM&oh)H!&+9Tq@%$xfxsJ z47xIK2_~ilWD<_tV;a^4tlH8N+`Ge#5hFsmB2(`V^fjDqxSa9dMsgIYFyXH}fNMB2 z&Mfp4dmzL{GTDSH={3{5`anm-53+hTO34$L*dwcJw&KFB*x|BIvCA75(?IwWFM!!2 zB)_bI~Uy%0ne&rR$eF))ce~bn03)J!)FHtJO4>}NQ$b%MSa@v2fKQ<7{hPUqw ze`RYBp=SdcLomU(o~BKnx?m{@dN5|=7Le}iXapxm7zm#3MR!Vg>FS;Y;d_)pdL@ZQs)_r} zYZ1o0fp}}?z-WDKywVTP77H-JGT*@;tREx5PG~|wV`DdyAA5|@J@b*pLKfZ6B_I!Q zawx)MYg0t7#g0J8?dMUIQs5#IU&ra|Gw`)LF=3tJvVl%q{GCD^{8utb0Iv+@|D9s& zG8aQwaW5f){ZJROo3>5l+a${WDN4RD6sB9a z@$x6=t7)x-QSl0#4&s>|rDe)Ty`?)aRl4_WsEw4txes-%dmkz`B(3W!i`|FX^2ywX z+Ex;q7frlG_n|&bO)#rg>3zv+*kqkq0&9E!N|hduD=?pojVpE^>XWfENW ze4KUA{Ve{7gKzXn_u7R_GO?H)T#RD6pBbrEWOoPxTQ(^>5#Sa~BKbU78jzqDOh01_ znN}j1Tj$UW0^1(9O!-22eUGKkTiW7aTTVp~U(uT`XWKmKXcx_*`bNxyBNz-qk6^9w zz>!G&Iw$(*e$W`^iL+kOGid_la#17o4?M7DmLYmHo-$YBk2|lRmF6~i&o7a8_r!)N zdBl4{O^W~zM^^I~S0lBZz>-)tg?Hi3Iye%1)!EPiyz@cpV;9y(%~LwGRA_$p;I}ch z`GDF0fMDDjQKME#Vcf9$f;;qD*Q4fW7*{~s;-CY@(dAe184qAJ=`!G$O!OEaVeXEI z>7HPKhfy_>`vT(Bb0CFe&b*Tk$=(}Pt*;u-O%V>=bD<=FJUb7_(=g=waSz88U6%%e z-sZ1It#P==Bu{O5>k;iy-`-5k9Tz4|UU(1dk%{9bAFv(~q$|Zz21}7?ZI|kZpkK@N z&|I;ebwIAijDhITd}rJ22&_(rZ~(2wtiv0*ttfx;;cc(U=aiC<6>_j8Ke4-Y9#$MX z9*)}A>21$-Eg1dSDbRN0^uK4>!(McCK9ZBRKUY&;xnvoJn=@8Rk4YU1{owZQn>G=6 z`GkF+t;9u|sQq5O>k8c)q%w_U26MY+EwlJxAL`#qtTe;Q$?M&J(Y5s@(NM>Xr&DX^ zo#XO@4C(F{=E8DNTI5Wc9dCYc!yF<^4XlUNA;U+ud{HtytV0_iS1Ln;eY_9C1=0aC zv@I5^w@-~U&YSLwZPccX=U3Oki)d&~{D916WQGAISl%@;coQ8eSCC`Bw4jsLXYM05 zB&88-3FvFd9Dk|~db;cWfh@2aEW<0k`II{2KgOghqy66Br~;wrPH5Vb0pmmqUe((+ zcf@Lw3tOV0*4SVIH8ES7euCe^W!Nnm-v0J_sBt%ts@g%zi)n^K-7h;3BlSO2r#4pu ziJP6X@6%K>nqJa`9MUx-H55c5Lw{u5qRrTB0MpGdj53VEA5-k^0Fc4F7b1jfK-1-Z_M&6|H;jm4uw5E3sPV-tan3ohL=b+KQeYXQ4UG+fk{P#wS;2 ze0*+fP_3-4wKQbz+79B6HA2?*oY!S%O~_l@WlXX^_rSCF`nU&r4%G1g3yWs=X+NSa z?=3yY{zBHZLl`1@*GNS4%UN9x(R0kXKCj=~i~R*Dec?BZaf|8sTP{8C>0bN>)kAA$ zAM{-F4h~&+CXP$bc{SFz&v_T+oVkb>;7%#|16`b+zXhuV)4mL|{T80)awj9`xyK$G z^mGSZcF*G{If;9zBN<>090H8QpDg21V$(-nZ!5)4KLFm1rdYg}+2% zWS@ijw|na6yq@~IG&M*4pys0rra(D5NYtF#<52VC_o`WYCV|I0BoOoBgXrJjeBLhp z{oMSTRzUk${^+4%$L}2#`vuJN;mKP=SubM%p)cF&nR2}usl6d*v_GYMj{O$wGf5pa z#)PJ6!G>+9L|IUXfL*GFbpCM6)PbT6xS5U1NQ6K(t62C3QInuvsrIE-7^!u5sE67F zLSk6!r1gmlmDUFZFka3Xf@t~*e}_(mT1KDXp@O()ULn66?g?!+7G4GF$2ZvTcIQG) z8xYbNjpWaeD_;rW?4$`_bouFDGJ^r#F3oSSW9xJ}p;S-z80;dPBVVf>v~8vSg8cA495?kRiaGcD8BFmPH+wksHvizMLKSMHx|x7Ww2mn zyJ;~p^Yj$CaOMVC^1CS+0qaH-PIL+MWvjFilKxKVJI`74lbiv|(Mo5W$baaEh1SuB z_l6d2{G3ypj*%Q}pmhUCsYb0EMCd_c1;E<0ey2wSj&e`(fFD{Yh?sGF!qJ62%-Kjk zbD#q6!=F2Q4Bl>98di8;>zV7dMf+&8yDtimum5xAf7IGa#$`{#7e1dZUa*0vHfiNxm_7+- zc2+Qcdsb^b)rcg+Y_M}w0NIhhf5)hDaKJAASZlrbf7tsTIJv6o{#~+=MT2jVfU86q zagYg#x+_$&B)}}Y3vcKwu7*FUfW!hZ3dlB@A<;nCWM)EMAA{RpL1~qmw%Ss~8e0;> zLXr(hHi0Tclz$>5fXEDsCW=6eko|qX=id9?eKWJ05NT^|`Dpgdd-w0T=ifc&+;h3P z1QH^}I`D9NXYo@?*r){e8XG8I+eRwyGHM;vH%r0H@RZ!%b)Di3u<8C2p?rH}p^n6Y zs!`huDm`$T#tLRX>;0y22GMz}F8hMJ5pGa*m^m`(ThS#aE!roda-eJODxC?38)iwR zd-(|@TWkP($Q>paQsMzKoHYO|b-@pkr2c6NVlcshZw9&R!5os+3=pLyTm5Ci6PT?& zpoR!fz*)>=rGMF#E7rjM*It1FS$VGsidV!W+(pwBv#Bc{7;GCg$(dOQNpk|V183EB zYXRjr1-a5?$tEt73YXX$F3>_EXkB}YK8_GXG>KGCnO#qLnYT%04uTmlF= zg@59p#k#95kB;&K)l~L#gvX?H(BtZ~Zhu!Zeki0l}gizf=Lx=%DZR)wIM~Ln&DQI}V9km_A>)tU=aRHF%H&I&RUC(pYWjjm+(6nPRSgAr=cvSngR2&>A}ws0}*zg>?Xv8aLOVrg)A< zqY*-uU8o03l0?EGi&yqxY&b_du5xr;yUG^>&T1bNJs+p$TmFn$hS4NiXisJd!v`@O z%N9f`lA9Gvv*0zbsb)<6uN5=gsS`zkQQh&?`Y^_md$DRT{vqI**t0|s>so+~PX17z zfh!uz^o`d!FM&%M`=T61<9jk}%QQ1^O!Yf`R_mRR zBH(;TTrxoWd4O&UO%Ud|fzw8LPl(hiKid0_n&qcQ`ZcMBNcRnQJ&9yvwh$7S%f_JH zKQES&{6}Wb{Qb$8AyaSw3Ne61%db?1|@irE% z>&1hlYtX6Gco5^`#NJtfB+g!XccL~~YUOpyct%rb-Syx=cb%$rSIFyj50OrrQAla9xLWNw zSxh6s>_k^Y$1${6C{dj>%xDV1;bal0D>wr4^3Bv@FH=NMZ3#MTAG!&t(XXw?9t{=@ zJW_h>+wjBGtEtD*Nuq!eWjfVzQ~0%8yn2?XKafHQxYsoysm$bao1lX|2EM5F*YuD3 zSL4-7IA%X9)P}C=37);DF4X7Y5j}%tY#P}SuyId@&-NV{`0GUPnr+%ni6+mtPK770&7U~|nv}n&L0a*;8kxA`CqAOG{rSzB1o`SLR%D~RL%r}s7UBZE1ashr z{0iyZ=5S7dN$m_z;{MOSPND0Tu14Veh};z|anJy1(>hMf>^7zVyb4V;Todv!vfJnk z45ct!45`u@*d8=n~ICt2Cg@zwpn9|pBD3!z+d-vG;&>f1jL z5+vIal87pfu}s8Rc9^k9Va04itAYt^vEL(}JIoCUQlHJs)uUHr0^HOmV6vf9jNt?x zdgm=l_zi1U=?X-eoAFrE&M;5lz?D3PqwrNja5IB8&)c{73oe%hq6TJOd;PPEx%T?J z3nd$NC?uVAA&5(VD`BM~yX~`d0Wafa$+#uiur_att; z?^6C>7LfB8w8GX-l<}GISDiD|esEh$UEOi$<9csAv&ub-DJ|KHfBKwdj0_Ou1Uuf=hhBY&`blG`pD>)c+1sY}B%ogUslDe1K4nenrwH*hlbU3YMR_m=xUL!i zrd#tjHzPhSyR1@^t~Rz;$LoS7(#5NrMZvB*x21P+X^#SLJS@aceh&xX{VrX^p)wDq zv)^d6X@FZ}Ga@6M1+$piE_((}Z%vFZp9#L!(bPWF2^+KQI5U3{1&ofe$Zcw}wrdK1 zNI4sZj|=oSIoxG5eKZSm#AfWW&~b+Z5{W%d4F_-2{uPbGONAc-&Nny#>`IweLID#| z<+ZA6xE^5Y6wV=M#hf+&j4tYa9lVdy!~YU^-vk;n#Mz zV`_j!G-~BUZfj948FU>Job`5k3Fzv`BdDbMP)9TPNb4(JM}vzKOzmqxLGYo%_X_K& zK2Wd)js|(l{gcsZ;B|=^X)h8!Aeq34iR@$0L#}3DFn@A@EhBqJT9w}HpQz=75fiLd z!=sh*E`|zZTV8bdcrKcI_Jc+qh`hS%T7cPB8WbDVy!>4?03B>X4IsgX4Qi>`EB>fN zRspA1EP|~TQq@|58K0Cjv6KQiIW|+i69y2Yk86!e_b(v~<(sYVly}Mkhs5WuFQPbN zv1r6Wi0c|gGVe9e&O(n<8l(BUrK0M-YF^f>YgDEn391{;lu~?U2Va?{;Fl%#^GiR@%$O`OeqHZ({e2G+|M>XYF6j(~# zphB(R2lCQC52|k#D5f`;mFpI$8W5cY%KwnjRWj{flX!$F1Ieb~f09N%hZ2VSJm$jy@^--bFoVZnj}8vx8>9d(bJ2 z6Po3O9gr*Gi!h@F!i;hodxLuH{$JRI>E5-vH`^6&BaGI_cV(;9PT}u39j!eY|4VLT z5-mD~VQv!N555AGpp(Tm;(!a@Ge%eL3m4XY}17xL^L)9n7A&6rj2N1GmRpa&@1guk%K()q&Bkts58+-Pwx zH<{cW!F{fy;lffX(?JeJY-2!BP^}&h1{BgL12V=bEhoQ&V3If>dI-_Dnq*rk+b)4M zqnI;7FP&3hieiAwHTyp0Iwzgdu5s5#p=ea;iQ2**^_FV{@v+w=T54^>o{hE3hsz(x zHy?H-T}}Vh+T-blYRTthTW~hUVHm?HCGKRD!Xt=cb~3uHil1TAM)3#u%A3XGfO)Eb zpZ1YQ%lF}x0$@a+&PMi^QC&Ox;O`TL6X0k2xvj4lo>V(&3z+U{LmdgkitZfT(lHn7 zUgsR%F%AEB@&8%)e{Ym0XBT2sWjAm5G2qxR@U4)+!r-#&=b^15PFzx;GiYaXTJtW% zUh@WPM$Pe)X3YeIw&rMQi&#&72`=;u3{%(^#?t9$>&AB=3%MY2!M=}-ILxLta^Z3X^lMT4U7 zox?LIFV;2UwREB?{WNnN`4+exO#etflf=}+Tbvb>)$3xyHV*3XeQ024LHq*hZs~8gfCu7O-Td;v>B~JtxH-n;#3Yz zd(ZONW)kqaO(Yds`v_Z0c|R@14nv{^;C&Lde&ze+ub4uaUNjX93l4z$0ij)N-oK3n zc(u@bMbDDOj?DL`*)j^V6vqHZ`l{WkvGime#OANv#-@NJ(BoF^;Io#BSVf|@`Ls3q zX@&J^rS-{Q+mBx|aBjS9+zCD?+~IKu^l__h$c(#q-7KlC3cZ6|A6%|EFpWBe>y#t_ z^sfu7fFfBHK1=QL-(#1peg_sBn!krbwo>}aGtk?b+5LWSlOTBBtb~>Td*ObP&ik!? zCPw->@%QbA9t>VfZzh??n8^W-;~$EhrU6?Y-S~7=A2lPc$t7#ei{6_Xs{8YvAK6y^ z8Rjbxmi=@@UzrVxw)7S9Pa`WJYOjul7eRkDjFMU$4gq#yDo4tU=&RJk{?B+J-K}Hm zMp(N=ZL|<2|2-7~APG8v(g_CLBhLd?Wir${h%bLi30l>Ko zqD4k)^mnn7OQa)A8wUn~Rr`RzW=PzrQ3zo5P>Es{+-;qUXDUs4q&D6};o)zO!edOl z33NkKN=w&yM!NO`9_LrVBfKvGP+9Wga*R#In+IvP8uURMT(D6UZ2tJ3y+N?~ao_^9 ziT3DV^Dv?Z$ks{003RG9_mfydp7m&v6DTeOMG%5MM#MQzp&TT9x*g8xAXLK0H}U5MHqm4tCHNlW=Xn|v<}y3-5wjR2qzzMC81Tew8{+>7 z%c@Xw=#3CkKt8J7Vj7h|bNDJt-+y86$nf6^x)NYkYgKxr_3aJok%9iB^eJQU)W*)4 zAbuzRFC4mmaie(Or@&6U1xG3HpL6(l2cTFHK zS`X|RRTPP8PeFSuBDYCU>`5&s-|V0uIezSAFwO!&n|V> z|AuLyo+i*ScPIZfJhbD0+7A3hURY2&JPC94nI>QhuohTlPAYigc!r@H8e#rRs6cc| zrafGAmBw}(r<>Xa(@w`Al!3I)+6QL z7~jQ0a#9C}@A5_b>iawr)5bY;PNu$mGFXt-b20N?Ly^OUe%E_YBfp&VQKH93$hO?8 zsp1`DOsyLX^@! zxZ!BcgRjnf_8VW>6mwq%GuuVd*|7U`w|Hl~k9}|0GoC3e!NC{eK!$=Qk>FEQ(LeLE z68^YFAQ412aA*KO0ktjZ;yv*`k>&`f>C}p-ubPzk>ce@iG?+$bF_cCDuDdSqDs36c zalvDB%prpU%fkXNc3h^@v!si6#AmAlH--fu6Ry;G6_M?Zx~W^dF~Y~O(3ub9x&X3G=n;Hh#Ywq zd2=$2zGLV+?LC-A-zNSO1Z&!GF^i;(&dMCm0}d|cF_&ZSllqtxFq0GLaXpolRO`3G z_^yoiXt3T9U!j^awhcLPi53AjHn&4JH(NK?lJdT$x5wP5N6_Y966Bok>wy~gCwc_}i zv3ZnQbMmN_AQyaHXfr6as-%V<_4Qi)RVYW{2BcUYSOb|9rI{`u+$mZ73w7EGWyt%$ z3W`e<^SM!9E%_iuHkZV%(M#`jfKiB~(KjxEQ*D#lU>uKv8tw7nm7tMbsu4o51&e4lC20@*gK_5MA9}4A!Jyd^ zmQ74oJO__Vm{L)Pw1bBFqE{%Ic=Rj>AkyQmpNDSws%B34X87*A?}ST5um zA)irr!>@^;ZpeF@^t*hV^bm5A$>1a;nMzJ#^O4X00(?XTRQ}KB7n}k1-}<=Pk{5|* z5q_~8FW?Wg52?w%5kePRHz{HKBi@`(P$=d2~29ex|4c4kJld7sT%L*Zd>lvGvAi?hSxUgC%5L0Xc240p zoJ(#Kv=cKurO$i2ykF;boW9|OLvmaD&^nYXXW5rgIQPuy$QgZq--hx8c8b?GP+jvL zKo?!!Hf-Y0tjj&HW4KT2`ReEtO4PNl;Z54yaF`INfbuV+b{3|4Fyw7C0_!}ud8K$p z`2$ey#opsRf}Xq3^I&-#-u366J{{woSV<@ioFZUZYF9m0ZHYDn;+`9!jYAdH2z_iOhmu(#UCNVUL%D8{z(SUbGDY9g(T{W>; z`LN9TA<$JNlgL$H2c%O@phLuRG4mu);_ zs54Q|E1)LUFNpGoSVvrc0jrbg|*Bts}@Z z|H{1$P9E8lMuzW-&OBS4vt@rIy^$xxZ`{Wv-cavhhz4eT16-}cs}K!zNf^bYL#{8y zjSqvF&)|;lwE~I43jEO?Or0ze@gV*YxN+-*;>Vuq+cU|z;V@$M>W5O7o_k9j$n~_5 zXAGW;!-H_qJ0MN8h;v1SOFHqAn|cq_0#*4Yd! zh}ZCs=yX<3J)ymL9!I#qk{1j#>QS z6#8xITz+Nz9dzsgHzFDlwCKO$(C2ke-{7z2^Zy-bpn^7rsLu-B^ZW5C&23ft*O z`HRwKQny!GUalS&c-C%j_+Jft!|~YbI($>~JN$Q%buV8b(CIYusrt?f1jGK<9gq3~ z37!sO8xvRDS-Kkwy1X_vPaYm93Nt=O$R8L zwbWu39GIhFnV`KVX0{-KHN&tOeU)DMWv`YcVQ+(El;^nHcswO8uX~Krq&m6}rJ^+HsA zXadV{%=L@p)~yO4i*LwT{gR*=q@k;iSJ%KYtqGLpO0#)3i^IS#1>N=F{kn_rGI(zWIVrVryO7{|+endqV`*FB{sT*K>-z*6)ER@a1A44HZ67IE7 zHbMQ!Y>WRiiIC7~?mC@){VLbHU*D|cI^TH&x4_&KgKrsuZ)8SDxtLmu$?(6^%ijmT z*Xzlg7D!d%pC>sjvKS5B8p_zCw$o|G75#f9cZ&KZDeiuNv8fbyM#V_C-62(x+YaAqI~BEY!n-#eHYY0A zZPFaP4~mb_t}=+O-6GUCTzbR&ax3|p_W<4R2x)-@7NG9g`_ee8APP#!B4Ane!!wBhI!ek_E-HK?D;PgMhsaU9u?y@B6%pEZs z`jaFIP!k1=oiW$=iP96u%{X{K(0jMkS^=m7ECC zJ5RbBp2HPln{mBX@q&@up85r=X)9{9`JW6H8I&99u`Ufbfaer`!E@9he8Z&xN4DT$ z4%`kjhOf;gRNWLB-Ab2lLA%07*b|JcH}O6I5)KIN-5jyPbd`FNzr#V89UYfJwW@%O zU<`zQHR_7n<)uMb;WrWr$7L8qd*ZrOsWw%0xN-!UeHd-opJt9+PiwBK)gZ-9Xlzrw z$=XXKQ49N6RwN zB?eC151bP22UzfOd>ejP^DX}rvoBy%nN`CNC_dfp{i^k$_T1CEy+?ERLhEj5Q}<8Z zFZWMPK+lh>( z4%zP&Je2%N;p$*)SzeJX3-VsRxLlST8W5#V%#t}0a3ZUo@;}#;^3R_|rWJE1zW|~; zMEE^L%U@%)nHRo4h5LhYb3uA=nA^04yEzU4`6-T9oCV&hFf@hJ<0%{>*FSAsGw-m$ zg}nm-5y}v*d3iLS1~_*}j;iHaO;MU5Hu0($2QIQL>3YzsC`P4=2T6uzcZ;`>uyP>R zx#0-nv+xAo)_^Vad3CU3fhF;}D@47}!_q_Mifa}R0{N(6l57Dn2IPz}LvkXB)6pYd zT3jEa=Yl3V&fpag59mZcqwaN|5^CFBSYbzIl*v>Su>5mz`)E1F>#i&HSI zH-mDC5*FoZI>VOL$>Rt=nw}9Kj`s@_rK*-_eMrzmU`gJDL5h9?2s3J4eUz7gNlST) zC|z~Yd@^d~${&z#eHZ|gNQHGWT{XMTwr89#^1Ps2?7@D*DP%vufba?mjTAUA0t?P# zw1;=a1>1`VxkPsQDNGei2VuELw&&y-fY$ni-drepRQrpm&Bd;#W=vXecw{HR{X((p z)fw15^Zuoz?4JKrJsq>SHHF(DlWOyfYe2P*&AoFoQ8l`EmVt=eZ2QqXANv|{AdkqR z@a|$51GhO1?-=W7EYM1_o|0?>uvVQq<=wHD*8SGy_!FT<*s~ZNlP*V!*jiAOD3lo(+ zy_>(fO9&tpec1!(u~{gVk8j1tU>6`;>_q9u z2!&M~#0*A0#7cML1MZ5Lm6~#955iQCw9L6_1K4Fv_6T%!$*n-MiWDjS!OSDjCdD-) z?knxj?g83ica2~dz%4!b8Oj78`WJr)oGHH-y+Gbmjru#Z0halW-eV~7gLTpSPf8$ls*SV7 z*5+pExO@#-QG7w<+GY3&COG_HxL=p|r-P39ehTfeqN8Wx`_-p8PGI->GW!h9>)F(0 zU_%J*4;dQgJ;#&~Mo4v&+#%4zvl&QoG82n+R~PyyHnf#Ov$CNoy*1j;fr(XHKOODa ziq?Z%QTi)QC%87J{aomrF!3#UQTU~Q4)~UAgSkfD{k51TZq0!SBms!j)!agodo{vr zP~J#SEAB%scGY*j^~!hxxH$>Ilz3a2_LC}elE#n~Y!qghX@&*Kno#_^5EW@0m?QQj z)1G2fDL8C`+YZn?B1csQa}G|b+O8z^Ns@m5rV;&sz~JXZoSPOp)?q|d)X6VHxhSEk zvL+~lj61A0MO72S$tu(&PUyxZPk3lGxe}zUO(w5H6w}3p7qpk0i+#R$&By}0M!BdN zmJk8VmLwWQvo+aPnqolYmwonxVg-}b_8rlWX=8#L8t+Sg!4xzV0wO33xrI!PwFSf| zBbX0qc9B{ty+X2F!4g@k;}+-Fa}dfRRtt!T$36kL!exrtcNK*24(_J73FQuKnOafP zS|+#nRc(+{_AS@@YP^p?(2La%yr$7gy;Jrr;k&YAH!FGkhE}b3r)rF$L@Mmah5cYf z9s2|gmhgZlEthM8UCIr-mE~+>2I}54Ic~3!zG+3I01K3ps zAF;>l1T9XoEJ?Df2rZ_eC5d~Cn-~}*``IIb75PSx9F$9ReL3Y8M1EdCF83qr9JCJwqh7_Ak2of3$ zRp1UWOj9%tO*%`{Bvc}!oWU5KXZ$(J)j~$$H-;aO1Qj)EU5$VVK62%4Dwbi<64l32 z7{hE*>HD_sg-jI|b33motRQ3ye=6-<6-> zvgxT*i!{bLh3C<$*!H#~w_ae|dk8-XH37 zHR`{B0hM|ACHKEkJEfC<4yvVHzm~nS^VGV|w)^M7Gue40pc_~$zs9=%s`S_DdMf?_ zcFuIM;RvhNzo1t6Ph>cq1Vh#8-$v*th?ZX$?2&TB0~^k9*|${Hz67;v*kG#4oh-ea ziZ#}{PW3=0?z_mZP`%Qix)tvN1=uM(uOZvi{UQA*{XXTr8hA(d(>Q%KjMEp?Hco#Qc!Z6Dig%!Wny2n*pT>KG z>7&`F1LN~X6gHM&34ua}S9Q1`(##lEUa>nvY~uW-SXgK>;dVs~&qG%86zY&W+VK1q zd{H)qT^Md)cosR%ePxy1`OoB{!#Bt7j1(kJo&sE?X@$*MgM6~M0>mo&ci=5=)aGnj zuW56}L3`Mno4~Cg`H;r4U$gBuZf|}NLxUWwX>UG7zV%_6us5q&S@veJrf&ixEWa1y zARzwp?ahHbQ|LiQvWR7Hlz?r0H3Fv~=S8t6ZTfY}IbqYUoj-$0XZ-EdA!|ozJNZ^3 z8Va=RSERN%sjjmqLJZG#J%*?Z_RMje&uyUXr4Rk;a(uUyN@Fk1qi$fHXmNbMjU8GV zygvSp(ZgW^Gb51$gOVAz{*m&lsP_i2c)Q-jhKjGK)kI@BHlq!Ah}7ixOf7TJUXKz+ zfkw8jJFJX8KLIL`9ep0G5AE!jxOQAT4@8m{xNL9=i=JdZ_nWAs-+wJ@dS(I5QP!9F zllOaVjou2G9F6%srUDNAk@*j+l-Krz?Puyg{7u%L@?K}QCOMtU@RyZ9zKFf%cDz6Y z{p%yyw;~W&Ez6}PeNb2ZF8pHg`RQW(TfqHbJ^T}KUN{*j-t@o7RUyDA6DUK&qej1v z5hhJ=Q#1toL?jN$4q#&v@_OAlV8Jm3ngy=!U9yS8M%0P1u5E-qyRiXHIEDG(6~o^P zkO5&x0Wz3p1CP$=}2R{7MWH&feT1`1e&`Z1_V2O`4u81L1#u{EIYZ&4ruA&Lh zGMJu)mBJJ;S<7;f2uJ@Oj2@P491~$YwArSCVt=>>>;3mtlc~0!{@0FoO2v3J6DQp< zrhncZ*Mobl;hPxz%~gZf=NobQuKnD0gmdE9oCfyXl;4u_+h}ua=25@sX&&UD7hGNo z`b4fCCx0g%6e0mTZ~?)zP1%!%#=(}-(MYr=hRh0J>=cC8OC-D;$I*9z0^a6QJn)kw zaGZqqCu~5@<1vMX%U`M|8ZHpV7ygivqy7}7Pi&joaK@vD+HYQI1E~o8+0vE&8T)Dp zq_Tpt(s(ZN|_qL(V2!{`JSS>yYv9EQC?B>jSF zwgmGH=MwOb@W3FA=&lqk_ky?rdUm0J-aJ@N+k(~bPs$SWZ2ZT3r!fTP7vwNVc~86E z4_yz}5H!Rk7hW1%1bo!ue9Z{v`D-Y6#DeAk3$jcbfJRK(0NFo`-9DV6H5>oPel(sZ z;?ybre8BjA7v zpw#Ywo+9nR-7`vKf3eTTz;CsFuJHByJT3`boteh{V+V?_U3JiMx*925Dz%))0)!2A zFi0S)?CRl8Jfi3P7w~;#mc^cJIt*N;b6%q12VD1nS^s{ZH;)fN&e54P8S!5k-nD+v>i2S#F$+>#e>1&aULIUH7wUpp6V zz*9P&c*$8TM|&9<;*!}X=Q!uWIF*i1LxFQ6vCb+Yt#xpY^Pz3h&a8RKq4A)evo!Un z0s${@3MnW@umZ5-sOA*tuNWmVuq9qVufM|ozmK*NnV$HebHhAnXuo!vWOR6QFM33r zDE_?&mOJP0%i@jrcVb+)49ZQ6;~#n1Bn6tJ@J08|aX$Dg3LF7%+&}g=l!HF73?7yPULsRSyApHki7&Be;rWe z;pW6pa|+wjdkG|58AWLlGdRA5yMb!rK|XRB1d#jyd!fw$Sy!Hyun`l-dBCk%J0p{6 zlnSdQZLtZ{Bd(l{HP4C~I(VysdH5$GvOL&6RaA-9?j)iOE|fCmPS90=j~2!a0c{Y^ zihoZEu$zQ#c5soS~;DuEjY?^cix zFF~0NA~8ytaACcJ2+gtK*Kl*8Y3BZY(adP9I=nA~tBIZM`q>yd6Ewg#V_9PpOh5LV zT-Ku43$8ztj5bs{o$vXhFAe96Zm!jew)`;N+;+;kw?RCWks^A?Ynl@)nQ$2SVC7 zU*w7!#3K~j>vOvs=O2H2L-upvu^SPfaZ)_Fe7<}8L7COwV7v3ZOvBzeUgn^^!~cx^ zOG>o5`OrpjG0sW55ib7W-576=n|pq@J9$t2w$$Vw=XUHylg`o%d{}sHeaL$xcW-02 z-*6IG{mE_j&f8i3Gkj`CQ{JFA-);9Z4X>ex*UD!YU!huq>a0xm`!{zz{u&uis@Efd z^?>B4T93<7+V67zZ#~3?q1Gu}j|*IH7tiND(0-nH0+2@7End(RSTBpXWCQoCyB-o| zFk8q+h~jU*i6_81;1q*%5f&3*a!jxd-(D&19qFcT_Xj}X^)dXTrZOn7)QGWb=ej8%=s*DjVS#&wx-7hGUJ zewSzAuZ`$$*0b@~w_l*$Y$@+S-i5QEQLhu2+QVAe!{UsmIe*4i05cw5W{hD7c_`N! zs7Ip!W{^-(J9iT(a7wn|5C4jig}+Jt+tq)2^xs+hoAwrAO|F&4x!SXPRzT|q~Yp=r4t3Jf-*6e1yZE&jO&H$xVvkCY<`?*03T=1& zTLwA&DYvZQpACD)8IL(`cac~Aw^<mZy>$P>@8hY9zfxT~CdPT_S#R;SgCrtLXg zVTzlZQ8ra|ODS(W$MH9qm&8gUdokl1(h^yblb|b6qJO3`o``FttEy z4zDYvm`xaI&-1MbtxKefSHaP1`kD`p@_gxfP`B&jc$0+f!WM$uY)Z4op@rOTT+F)} zKyYqAHp)7l`^=w%$>nw<0{mhwqw$m*l|uXN%+IgJR}lQl_WAX{VOP=9pTTgn*awaZ z9c`C&3sW=bpZYaVH_JULa=Mu`iC(ZgYQ-$^{$6NO(EDV8!#407!6n-Rwe?+4g0%z4vfD!g<6 zdqCs+M+6)&0@p+mg&G*jFJ~>!WnkYcBTenzCLR=8fvS02RyBYj2XdPQO`?E(jGM^{ zig(6uCoH+^GNv_1pSg7XgCnVh6_c4+0dfk=HBV;V32J~ZpZZiyOSRTz?{_$ z@!ViNas_zQ_UKjbT^#WPfP~PeYQRe)muIrzLL>eo4!T7MD1z*EMN^R14cU>|y{i3+5QeQ{_ zArhb#A+(B%!1P{~yZnT$Za2pS{Q}b7l}q`)hNW)r12)!WPNQ1hlxjn? zTIR#8PXzXO@aCUTh%u6qH`uzW98~0Hck(tQY#8UZZJhUbrH&TbD*z#rBDJP(6}=V$yf}BFP{ctV#A_cJRj=SBRiDV7b1*VP@S(r>@g|t zHR!uo9siP~JN*(jlkpLeL%3f7xXb0BHr%ffxL<`_)dAdJtpWEm3XBH#7JO51H)BP- zt%th{uE(^VGVcN`H-ok(qwIN=<8Q?HoAzt`-|pMT_-{mk(Z=74ZybMPuNkWv|Nf3W z*ncQ{7=e%btmVeXM&f@{=JWfp1TS2_k15=T0;5gg+xS*71uefAU@|VE|xV2v3YK8apPN@yxebPM1)fA@`Kq=22#Vka`HTbW`d!M2?NkUn)xb=b_HG&B4?J@0|ce?=~4I96n`&cy+C~Ba+jamq$yhGe#AHSx&Gnpgy$1NZuyob(~(lHk7}J#~yg=p#-$Dvj2H6=Bn@YZAP!bx+tY# z;Cf-3r;fIt@1tTLJsB=&=o65Majrw28 z`($G|hG)(oT;KgVIHxWqv)M$5pP@Vw3$zL{un;sbH0NYbRG0lAcNXNr7LFZDwN!-( z7|IXgY`ovKKD6!>fsM4FQG<(wu;q)f@as8y^;(^Pf!KACmcnhj*ID{~Vur8OYGppg z6-QWbdWMn^R&M=J>Go?$(6TGg1#u3XfjlvNK8Ezsw%K*g+{}~^kZ{*X4Z*DSJ?Nbm z$p!;6##S~0p_XuYZ(NZ^pX-{obTKV3j;P{Jur44HHL=exV)tE1?h5eFxdDcM^iB_iqh{YA8DYiGcg_`izAQ=h(#YoQh*QM zRyv~;WdWU=q1F8i`v8$mT7QKm5Nw~zmjGybiElL6GeHHMl^CaH*xtS1hSot*8)wyX zs36u7f7RuyW&Hk>iP8snHco4t4x=RqW1@_j-pNKX7pmiGK{D7{9%2@QRBCxm-vJKX ztj@7`&je5zeq2CeTZ}}0E44#9T~Oteb=!WKNxLw)OkdEL`IKS4h$qwdYu~=>dRH{j zfPxeA(_L?BI8^upJ~+xyr*f#)J*ql5X!tfG2d(j|u$VE&47iAW|MNODFdC3HGw+iv*8s%NCS^bIePcb)*f41aSpa}oN zA7vi+iFS8|Z+Gj*Eiyd*!1pE$NjDWT`-6y!Pw4KB&p0@^8OmaPCZERO4u@xnN5|h?*L;y!vS%>`Pc#oBQ zWiq1NEd0{V`~S|tiXc_`69inU?Khc^+0#%`MU4k&4euT{IK1)QHS*>k*$TxDB%u*I zJg;qu9dbI`iMW^3f)g>K2qb}yG$|a6gg%;{N^k#kV4oOhWhF&t#-w21$86rom84ZR zE}9e`hO86eBl0fN&o}41;eNu9KGU<7aTmfuBHdW}^SJ($SCP(ENNxRSNbQ~&ue|99X^LoH=3vpD2z524!9ItI0~H5y}O3sm03R<3$8KZ zDdBZGW43n%RGWxQTddfv@)L*qb*yv4z_*a0Qm-c>yb^Gd^1)xZ6+=(^eUu9B z!TtQvHl&cn$-TnYCr^qa z$3@INbc5ij>rIIJe;Gq}>Gy7P58djY-R}*$8=gjits=nDSwnn|a}5HF_iT0B9?gCm zZ#Ja8``p~qug!7hKL&BTcdJ{RNS88vj8|`PC*SXGc&35h@DIM#KZ3;DDKOwh{kLo?(|FuDqoI1aN7KXnLe0Kf6r0@e27V=MV$#V37s2~@2F5?b>X=$JY zm#6S4a3-1>&_L^8nH%@OAOC;rePHWdU$x%#wbr|Sl=TkYSFE>s|DU+tG&n0o1D0G6 z_^pb-pK$VjC#bZMG;KD0^r0=_YkxkFsY8${{|US}09wBR)!rbj|AEo@C8YClk#$dl z&SA~T5oRH+e?-yxxXfaU(BG>FeO%`Acv-RP;{;30syAJzfgtuGEQ4ha zcZ+|k$o(OZ`(x!4NF02joF$Xh<@x&y6~C{?Z}5Ot{4x8@*JpY^A{&V63Ho?oab`U? z8-8z6ONEFY@D}nExlv6WGK$I*#=(h$Lsuof^-(JpfdZJ-`3n<9CFIZbDf}ac8B}ww z-(9y3fmV3iW3mG>!1tjdxXsTW%l%g3on)6j5b{P8D4H0 zoZA0}*8D{$sjNr(OgC&*nJ1wmeF~8)>}~ic1K+S-CpU15PEs#W{<$q3Cjr7R*r^UJ zd)Y)3g}sd9im1sL2lg7-6P?wa@#ANFT;1d7d~pSOoRM_Q0x%zwKOeQSH=6cp9(jV41!X$-}U2FPH91gpa@%J)Gzts$D<(8H!e4|_Xi zCVH6ef5y4lW{jx;9hDh%jAu-;PRy6o$rA&^*4U1+#&&G=*lZW0>DO78iDUDxb)`y6 zlzNS^B`~&Y(7zrVW(}thJj*9Bfo&2)ko5`eI|Gd6fP<(rP=uW??!YTrCkwCQ!7Om* zVR>SEEdy7CbLsS3N@qcjGN7K!_Ke9u4Qqcv9nF=DkTj)xcZSJYsFAC-WiY|oX|Q1a zE!wawNBzV?J{NYmF#CP^&m;h#&b<|r9?CZmBv^BVS}>7`v|6S!4UDMpR$?#ad(wcY z7`o$6zyTnwThj{iIGCHL_Zyc^!g`%&a7j(7cu#zV01>A=7z6SWhDb|l5pGc4=&VJT zf$?_UVcA^z_YCbZ+Ek+%1ZvC{R$_ive7+;z$Bu9s9mFswk9x&CBwh&4b?Igew9~+( z9lD;uN7b>}t1ua89Z|%}i)l(|BP}MWsLVR|U%@BnP9G`V4QIK)MeQgt?P%(dZtNY0@>kmSIGl5I0lEmkrXj0!a7`LO z&+R=Z^OoE%p?VD#JL^7aQXg%d`e62Btxh@&7w-}Q;Q z>zF$H zH&UnyGtPmq+ZSdumySldmp>xRa0)vi9mtrDMSAi|ZXi2r3pH#M2t#sgG_lbN{@I#! zVZ|EVKtEmaCKHN9B*x(uSmZJT7a6&fn+ksDp_S!*Shehv#0EeOlc_R`reN3dR* z;jmZEqiL1Tqy7ADZwN*t?+46w_hY5vifg~cVp|x3Nv{DnaJToXF5KS7{g%!s2%E3J zhSpz3(n^*me`b^9>0tP;pG3O+jz)G#!G{mDGkQN6*+w5B;$F2VgO3~GFqwp#`$BVF z=DqwF+m$<^K6{iZ2d`obOwt+ocr&$1hi_@F)#P#*K+|GqMJe2BP1Ur+`&$Bk3HWm( zpsa&@t@-BTwD-3T%E1;RE0Gl~-i(0GBQa0$0vi!2>i>txTM@xa-HdEaBJ6gSN>_4a z?o_WpwD77h?H_2J-UqR{(b)^n>fVbPTyAti{TFW7mcG+I_ zwon+xl{Q&5gTX>La1NGmxRmR&WD{o`SOwcZDb8($4}I4jHS(eCKL&~^nvj`516V18 zg3=|=Pdv@180oe zJQ|Rjh(w0sN++gAGexxyTpBEflfRlO`XK%>OCKQg&QkfaT-4{uir0Mtqtcy~?}6sp zZ|14XQxR=qA9u3SSQ7>wVX|XzqpKr~^=q2AJ|+29GrvE>wAB48Lbi(>)A9mc5l;G73EU{%M!T*`=G#e%zjqV&l*q-5|r zvuoo;ufz>Su>o$HpXQz?oW(X+f*b()5qr#)90}{I!3FizPi`!QqgdEi%*U0ojs&7S zQWf$j7ow(OE5mJ!iViQlNY<*ROa9d_9c!d8y2H-W;>*cu|0{<$DH!52Oyg~aW_DXY zf=&&9QRQh-Yhwm0+x(`|_b(&cj_l*rauQ~v?058{Y4`_=Czocuk)_a>p_Vg%Zg{A; zVq92gH(0*07A}kPI~1VXUWiBnFcM20uB|>tcUGag9aOaSYlKFQ@;($ac7xHnVVUTA zyG^s5vvo*5+um&ZS%y<>4>(VIi{%(KBCxS{!!7q||Iee*M9c%>p8-Ajj7Fe06vN9H zZwj#4{_UwsABk)b-~?qU4}sj?rLbLhKy-)~7n-5FhHZgggD|dW8tO>E)JjGUK7e>0 zoLH1+)OP~`lRX*2WtI{y8@bCwa~eZ;mX7{&AZ)Za2D!8JY$>wX)zDS;3__20a^k*# zE^azf+;nt%%$)WxF9uT_AaL&I#fBT~J7{h17i+uU$GwrihWc&sl6vn}KEQA`iMxl- z`e(=6{=@mALw%fV=22*W$gH8WGr=$Zb_Bk~JKN^PvW+-iKB4VDG9O88X^0b4YtSyZ zj^z3Dy-G2+dFQLd%W5_DB59w`++pP9bK0j+Myc$(a48Q9>S?SY7U93s zc|ANU!WsTfXW6NM!N9wuMuf#hZ{U*hZ6#;vPBK%nF>vq--fn*0VGNN*3{l;+A}qt# zss{W*El>gi`v{|`lg2#Cm|HMR=5d&*THA8xO=q_cmqPMP2mIgPmnD zpEG`24_s)AfI9Nk29eQ!!OJoE z2WaJjQ1MkCSV7S@>E{<4d~jd9~U=nwt6box(5Kkyu1k?4G0Y_hL}PYx~_|fj#l;MV{GKT>tC@ zH>QXQ{WyjO>&|E0y(1e+#~?;k?u!Zh&ni#Mhma@c^Kc&KPeWyleg<;IEN;2|ASeF; zypVh`*D_zswFm7jAB{Im3)<~H<9dr*ye-{+=ZxKHuk)1M>EfBwQpgRHo{Wg9)Z~Xu z${4yPRmzx0b4(dC;goJ~!Zb-4^8>k zA3@&J7c^x$&}-97ATEvqoef@(XxO*7Z5uKtx*iDVY%qdzu&+F)@j}--$S9pdXEXtr zXEnw&-D|``bWEx~_uIz#A9`g&Lv}H;Gz}rC!r4uo%g0V z|FS=Zb0uL{Wk0Y9oP&ex_nqUP+qnCq9{x!e&u>oUp4r_!d0S`whV^ziczXy6wo%z)5ZEbyMc(S7Z)`w92b55Qy4sNld9;7iJ@*s=09s@SL z2e8RMlzkk9F5+iI;-JL5r@AM9Kizhpv-F+BU1l1ed|$f$fppu`Dd(*3%N-nuc#bU6Qu2T5!~f(;tN@>`t`b@0CJW@$o7ZR-u*`5RvKZjZ-|rwGS)6enRpJBD)`Jg7aLeQWv*@KB6By2H#QBLQVr^F>1$ImIS#G(Wp~52UmJ?BLce)27;0@ESP%CWwVHEkinPViMpcikhdO+ z9}q^vKW2O~RRe6!0u325A9H=)$$wb7V~a)-l#jtHMQ3W_h{6REadJNgtiY(8!U>pS z;XWr{Cbq4{Emh#&WLQrAQM~c)L%OePCy;%=Wp8;i-t^<-f1}&>6KCm30vtesdoh6p zlobI7oi6oHl@98nb}Nbuc9`2sOA**Wy9WoW=q?}{HJY;StWxf*Np zF`T40l%Q%698vNY;F}wuwo~|fE`Dy)LTl$~<}FumEpGB245baUJe*Zi3Ce!R1ZBco zou$u$F!9{_P`kGc;^w3Ngobmx3FC2B3q$6PImX&K2Lpf zVI}R!n7AE(AJ$XttJNVuiUo@tcM9ye&au+8kCBxtI;R?cjE^}AQZ8aJ-hM(>kb323d%3eKLJ`$ zkJf^$JvE6sw|la)>!%g(@=VoaVsm?%s z=*@3}>RLeJBQ(1u)wabcAPWJToy%rtJ9$L5*v(#QDxz6y{DLqhZ> z4`K2&qd?|hTVdpkGQmJ!AhE6E{qFb%52Q1>LG=D6qKayVOXvEN;voOj0dvhR1a|ir#)_bd=LeR(lawl8C{0ILv5AE|62mpD$4s)~WU-lgg;z?w&dor6 zn!=B<+Oi@t^Zi*mYl&D~Dr>j|zx%`eW~Kj0dHXZCOB{6COBE%--FORjCcI`X*dLmR z2hF5}dYeio;4UZXBESROQ3?RN#eBSvkYMlu9L^>8RF){nb`b@8>G$bp0aRFs6?gsH z2KkfBfR$J92P@~LSg8^9X_DK9_lzPa-lJm;v>S<9uA&cPdSEcYO11(sExYAT77g#< zE7dUDDt%`L2L{JKVjbMcTX|T1!|sEbd5%bXlS|IFVaLI)_qaP5x=otONylzMXmU3k zEdoxexD8n=L`+|8h7b-(t*woDI-;}fHjYgtxpDmqce}84?Z%q`^_;@Hl~Gx(kUpgq ziO0ZzcG0AJe67K}-OUX*mOrbMAjOYSzQpqHtWn;{FP2$#>|lxGYLtK-C^y_(ZbplS z?m#QhC5GXa-slvb1nQD{0MMVflL5^=<4n2S9w=2Wh^)ZNJVO=T+#ckVdyP+!nvLZR zteqQfD&yii)Bbu+U4WYg>crA$9D6gl16`x*3N9WYrawVqQc7 zY~rOYT$7W@s@#LfI;aqH?I6nF_<$!V3Ef+96Xm_`^tD^@*2zDNf8F9)jj6WRocyi) z;a{+u`8taiV9$>2d|{9;b9)+{o6hHiCO-;`iS$K#=I{xjJ$;pwoW4pm{8d)-a0lQJ zV5UC#s~(e=yWA-SqA76lAdp6Pw=muk^Tsaqqi887&&+Q% zaL#qQh#X%>ai{PdV1}e*^3K{_{s;V!F;(-(vF)~1_d$xo4YEn>J_~G~2keGYI(MXNk;<@oyg@mkL7j*REG(LI-o*6{>SlTPLs5c~Ui|u!9)xum|;P!mlyKV)jPI6_{?*h{- zefs3RFh!w>;#GY@ggd>i!P4Ppl5MY=E$y%3SjYo^hi%cwDt6KBJ)NdA=asZy;8;dh zss6XSevzY~a{`2@u^R44gi3GD0o++tV1w!h-R>;REKb49vsgjU(E zmBCxxGQ5TKgF#Pp@oJ0dBa->RgF|{jxn%6mL2xIXcF-O0S>*mLoG1>5E95P|8@~i*mGo&l-A8-2RZ$Zti+EHzxeaje-g5izYU6IVe{#2fHCWQDq(VBRG^RD%U9yq(-_p(WMYV0D z9F45WNodu@npg`W_G929v~|E+QMPP+(DIRU6RNNY1`&3JsO<`n}FhN{i-T$Bm|WPOz@K~(!xps0EB(vRy?V4y1Z#ARIoxg zrTp>T{`HWo+p!k6q95tNE37~xsp5j;(DDlDy}&^X$q&8Zup!KvfN2gENSBMP5ZZS2ww3<`L~ZXy;~Mahqv^x z4nZfu65G?owJX_^Iqh#|sLQDEJZ2{Z;GgP-`r{Yao>$n0f2AFMOu)G;KYV$QS+X~c zzU@$W+|q-mQ$Js|OWxnIn}3Rh7#bnB@d{0N0uV|ic<_B0IK6e<-Y%SL@KbB(+@@G9#4*}?ux9>R0h|JY-o*K9!?p6)-irQYKIOa2lWX&m z?2Gn}Jo*U28=$c5V;%f6?4ANKqG!GggE-6kKM{7QU)H|mPH zQ2Vn_K`Tw9{Yzu1;(8GP-o22g7-s3OI+2yE_+{-5%&r2iF=9JayyiXN9^8{~^}&r- zvP-B^@@K7x0k6Q9LsFpz17T$_kas)F&cs-Nu_@>Qs!F(MbxEe)D}y3GZN`(73!7ghfbnmcCDSbI!XFJ_l$Z6X$7zUHOD$7{Yd3MkTq3Vf zCy#_cVYfg)y)nF-!!GTCWf8z{QMI^tqn3&q^2eVK`Y7yTWpKs^P}c95y?!B};1wEB z9RdTToz)$4m&^SMpaxcG|VJ6r^H>xr0 zV8@=)&e8ulGS;pYV8?27w@{CU)e{;z{%_{>7;2S{2i*D{P^3 z78@-R{1i~F4`FAKRLv67l|pJ8-nHI0vWk-p1yz)gAhyg-C_+pjRMrYmxrm@at{cE7 ztD|C6x*#Efc!{+=>bp>#rqS5~#;}N5KZRMkh@ha=ieQAVFjp68s%WJJbJ7U3HlQ2~ zFlOGDr^8Lg{jn`Nox+zmkEj|RDFGwxs1o$z(LbFr`lsVZ|1`n=B(pgX2|JoJ{O^8m z85^(;>Siap&Z;sq4&BfUDXrt2{M#h#7V?-nFEY?i^A{xwBaU~sVBmC@Cx{g4F)_Tx zt932>YV=~50i^O^=B+^1-Po2PM;*3Rv+-1yJq5Rb?2^WABh1rn&t@jVAB;?oxsBM@ zA=h>+)%MdYqCMBvaYu(TloEJ^4^?SweWGO5WzQBDEP zn(;e@8NldrC;n0Pbje1i3$0@II4qxAgh=HRa(%y)`D-W-{2;IVwVakJ47XoY zNr|a?H{Zt*3Fg+y(F|7r)(OXC;E9~T1qfz^I4nKkh;8d&xJeQ!rmj|hmj9t|y;{+k z2D$vNvB9+e&s<+F?9rG^9?$4?f7aKEL)>Ub*8_i{TOw{;4yyu5&O+eRSxuRbyG6v& zwGCxjUEhT%4|?PUFvj)Z#;#w}hP$|(x!QF&BlwIgWlkda)UQLNf_kIij>#jyPeZm7 z=(^SQk8-`9-NWnc5$W^)f$ajJe@kAxU33m?mn@ApAHNlEjTg;ITcqOKeYs)@o1`mg zusX#*Bhl`iHEoTolaJGrs0;L-DDjR?;lxG&a>*w4WBgb_zG662X#15FWfGA5xCw}x zzbDS19>g{eN-mo4>o$1l+#*~l=t`ejNc*_H%0C(^v^ZyulVt<&4*xJs@G1fc$Ruru z;+T&s97lFy6)_rYrscSzT`&ejPAdh>h1*n@hgt$kb-gQ*2SfD+bu=GO3i$=4u=&)b zlpB?i*0ZI^P{49b)7w=$a7@+7VxWX^+aMNO@As(r<>Q0sQ50-=;&t!lyKV)(Mb%>( zPw;yy`jlWo87Y2W?nAFD#)zs(dkxQBqX5tKM*I>CZK3jdo?W4HHOuZF<45Pd< z*s9CKiZ{mlbSnn14{}6FU4g+bCe){Rb9{wq^HKU7r|CirfrPVg?Ak(xR{ zMHu#>c`0My94G0N3R0D3Z zE^UM!mV%mz3R##_&?vpb3#E<={xFDwx&drvq=AKz22{M$JpyuF3upDEsCMz%-JQ$m zD1$UROAmhl%JnEGH&kZH^`K;oRPCPM|8A(v3fa*p`Pp4Z@H18glkdYLe95=tPwU`I z?zi0HJ@H0>D(xx2sL=t)qcYz*=)9sbQa@vcO8pz1L&%*`%+wXr}pyF!XPqpV>AITn7u9rF*49p|;ml%MS8>$h&26-Le zUDr#JMmh@r4#BWa?=v&J_LGL%6ZNUK7a{J$_+%yTr3JU`$?Q&EcZ#qMl^g(Mm7c5s zMwHaVizmg2ahPTAZf+lvm@c^jJjPho6&Tq+LM1cQO{R+Np`Z>4bgt}DgP$mk>Y!J^ zKcL^RwD}CREcgslCToD#gBCQqudD&4BsFRt+QgTTO(}vlT#H{c9|j<`WN#43p1qi# zyzh!Ks`Vw+ZTV%`AO#LZk;jG~F`AMIvH%K3W%iaPVF$`Y8NDd695B)-Tkha~nLkO> z(N0T>#e8@p%^Hd`Lq}Yg5eS<~7a_`14TbYMgd6Yhr)u{iEW+s1MnnJ?Ab<*lIl_O& zFr%XayqaN!%I+W`@VWM!oPumrF`Go`l$8XJNRbxKtJlID#woz!5-iXMC)b=;a;$Mw zOq=t%h~f?Q`R!_SVfzYD*b9s?uitCh@5Jta%b6&3d?z~Xt}&*4a^ipZw2uXLt7)hI zm2&5+aVnZ_@lN3tnq}Mw2w+Wknr{$NfpH~TaH|CZ4N>=LDJ6~%z+qSn7mVr#>On8o zx`t8uG^f!A^3Z%8I~VU-+B-=r9;ls^*Nl$V4FG}F2FpT0K@m(~wrXP(B%%taHCw|9 zst6ki@Wi$9eCgzGj|voTe}Qtu`~OIQ@(MH)!tB^PqWtbMA&}bq?x^E}$p;GpD*prG zcQNW)LilHYD*Hgr*PQpgY4aM@ z&5QN_J>*j_^cuBZe+%1`vNw($n z@V{NgLtHRT;5bSPR2Q9eB(09lFeQSv7Spyd$GcgnSN>sa#5p`4PoNY2ohC{PG#%cV@&k%f`#Nll=2s^x!KNe$XRe{8JPh?phR~SCh#4ppl_I%3wg|wR+uFw90 z8z}7fBs~OdG%$v9K=NJBoALFwJXW7!#&ebhiW?1tT@0QD;jipgQ1jCI2jRL2F zknuRExd#AKgMpZjxqc@MiEzNk(fF3Y14Av4OCC5wvLDcyx@+hE^B2T&4>U--WnMxf zPh+!(Fv(>UwG|t%dj#mY;-QiISr%WB%p(naO@kRH^a^%w#kZ<$TV=M*@U?aV10 z4*(K*Q-6nzLgj2PA7i%D-tp$lmaL^>wj!VobhZYo$DH+4;y-3R^ES>}89ahDzD8#K zDupWKDNaM!3k|5Mgy7ST3g#a`npnXFH7wPjmEy2AGH6H}EKo6RK&)t2rk=tJS>gi) z%b4Ief@}cb==^F8a4g*~a7;e(j|Cjr!w8DDuV@w^D-!;rN*o)+8M!i)hfZ++1>+b#PNm4tfb7AC`=v2n=IcT4fC}En7qDTj;9ti1QT@bw z7A&2N`ryZX{61w2_A(=*hND#JJ)R9&p zT`1{{-swwwFLzTJ0SJ-qKJX`X``0vgBga;Ew?8L={R58y-O?mk>wtz1xWVbw0Y)mR_(!OON%t%(;7O8XtgVHJvrvOS1%jTdYYX}?p2nP=6kSWRS;DqF%R~}YE3VbpXWC;~a}4J-DDDzz zQpmI6=_9Us-Ueh<4B>lDq1oB?|1FJ&tsB6u)UAp?{oQR=A3=@bM3X)Yp=bw z9-8KI5ZRbOwk+Z)z{54f6MPXA;IFJDk&vnp#hF0L<^~RNH3`6=)K-g3z8`Cd?(MpP z2UR72pJ12N?qU~cK3YW+T8ILoRjTk8YK_XrbZdpf7#Llft)l!1?*4cL zMex5P(Exl(sn4w)FEtw}eZ8pKcgldMIk<3v;x9EIcXlfV6iF-30j>pph!h>f@`;Vl z^`I=|;7HXWecQ=y?8vMB>muPy$wXOd_I*pS%oeIqp=*!2K-85s)$X?wlTjgsWln7* zr2ys7WWjVmv0T2x^44)K zooZ5tBnul7i~=%zmf#H_LoNy`K=>-fu4&Ah1Gz5LXFyleN1!Dil_nb4L#IeK!d{TT zI<=6PYF7Vm z;XI&U*H_?*9R!p7sqnQNqON&F7O38yastGqlUUTb@^ z$08;fStTtQ3S;$}4ySgY8+L;C40DWS;o4s#1{%@-OMRv5>r+qKi63C3>*~-kcX4Ev zh7e%|Ze%kNOiaWS#AyQMUHAGSRSWP47!6;I=Mf!5^Ov}q)*=P;WLj`ZaG_FrAV!pN z09-4?*(7Ne#)Yp@YykJ#J<(61PXKc)B%{o}7v2|Y2A`BW z;6!rJnvl+DG$XkzjeaI>g*u;99Qz(cG3+lXQts;F>Xq@0P8KABE)QBThnbt{jI#$| zbN8&%w<;E+;<a)91LM^r z++k`*d_9hjUjHE&1g3nr0pSk!g)>v$87X=pcPIQ>!s!bTKd~(JBqCZ}a1gAx_8=o# z;ozSNYV}&tBjKv82p&j6a?_Ww(}`#JV5J_8_ams)*wRZ%=#5 zZ$onhm_O!~Ln^xDmfR%ca--z0p{0K@^MQu>6d=ES)hiU-Qt;A)I+#D*dk!=*SfAh_ z7DSRI?rV@B^2NqdiBBu?pm)F7@)t>I1IEl1NT})SUDu0WD>jiFh)FIy?c^p>f#n-n z(g#jWSM}A-5y(d2)Hk}2RrNvNH!XIvRR>uE{kHjvBge^^Na$Twic|7`MXe0n0Fzc3 z3_uXJ&ct7Gp@K9r{*C+#2Q6o)PuMb%z57oKl`Jp@V+WUrEn?1%J+dBP{P#VUlv zaONSx#V_rG2EHO#R3=?=JK8Kgdlb3Zv*<*S`0~hEZDj~QGPh~pR3q4I?IU*b9Iyj5)ss*Hxh82MCg3h1TTD*} zZiSTr|Jr`(SS+P(s$LKIkgK3@)YW zK*k&U0X;Bs-M^2`a&V+Dxg6b)4ka#?4mBd&>f-Wn)uwR&q2ky{xmu*6al?-}-~04@ zXJt-i!4@8SK8QT?WHcw~s-sZjgVnw*f2xX8fb_!p=1F~F$T5VepbeINTl#=RsGm=!V#t(c9 z)DJiC!S&}DYt78p$L9IwH}O889r~wmQU#Gz<1uMJM^UZ^^S&Qc*L&Zdt3w3^@nL#z z?6P9V0x}HKdf+zJBP9(KS@2u{`fI%|A3~AAbFm62L!~iMWiY#Vd2RsCV zftCw1xUC9g#$~pdsW6@hl`$$bPHkpZbK_2(eXNXq zm7pt3hKe=G!ilo@Qj-5~13=uq2Hu_v_$pZ&xnLxMg1?CU!FCyhEC_XIV-#k{ir5X1 zGTzMAQPFO|6%wv-8=01>0m43MBC#MnOfR7mwMeaZs1$ zhP&{B>|{B+-b50^l>uU^Y83|4bU{nQm-AsD&Tgy|q-g3O#s?;`PHQ97`P)>W>uri&2;3Ae9d zNu(Xn(dJS;IDtG++_U&W-*8Xkazh^;*_5V1%nM#PB(w|w3hy%$Iu?I1 z6c{X`VfEfP3w935EnG-gm0DrN!odg-LMhz?mb*;h*Sbl_*O0!t8VCDTN<#`tQf6T# zjxa)B*|3FnE01P%fzUxOTUef5zmIDJdr%@`VaMMfF~W3~hieZprV}Fvn4_d@$d%=x z(YA3F_+oE$3s<7i5y%|h7&4-z!ehj9L&p)*E3g5)rJ#-p{(^#K1sMo#x8|YU0D^+~ zkofiqO<{s=0jmU(jA3-DZ%ULcgPPhj@C+af&SxBBJV@+@1H_YNcbjn;bsMCBItV*a zXc$SK0a%KOy)sg@2Vzf2d*3e>@48QdPxoVj8qXVFVJB}Vh;bPNR5L@INc1K_j;13} zkwiGB^9kp|5;H^zz99+^C>ymXlv6@oVwauxJ8J`TR2$!*|BT2%dLQ86tyA zKk1yH@d@Mdxh-%&j#O{ohx!PEqXa4sW7I7VtRN$rq7p|f;(8L$5l<3v{nalk+*0_$}(0p6uN!kX}?`5&YU*j^cx z)NO$Gr)3m}CV>@;c`th5(i%N=t^*OzD8W~S0^44qxi>Yr7e%}TTDqv8D@Bqg?*m^( zjK4!+sGigjU@1olYOTR|__dJQjg_D#SII+1xeRiDga4G2Cj)i)@jvy!<5!-&VThCL zdK7Xs81)?|eFybs?0Z56oVt{ufF$1EMR@!)Os@TQ;ue0_dV1~ScH$RQ8fiwjfghOi z9i)hk?=dBEKfMsZ{M^kHvo;hoOb&Oe1baEBA7$} zn%?vswpbv)cxkOXT>c?iE=(f3hwrDz#P>gPe2^}=VgRY6k_gN%?aMxDN#7)h^dR(O z1uk zz2!SdBv#9gSHm?bRt%H*XoC^B;scj{i%A<{C<51IM!YShdaN&_eh5&qmwe0QogJN?fe z>lD2y>pA_guJmY>+T|=?--o8{Dx41O-xG3q%Bt>&dfz1*<1{+0E`(d%&) z(;F9M#y-IwMXI(t{m+&-MNigjkAL(SY{wOCLmcd`NbMuh>G8=-uw6E+z_Hgav z(JAqDd^{#r9PcYadNYBB^osa8KDy}~5!1)S*YQ!MLt?zvKdD@+G)lOJbTz5Rpa8Ii zdtiEIYqrl`%P^=aEQ_%hepZBlSUI$U~S2V9lK#Yf=^G1q@B75=2aqjK~B{O zA<}~&L}m@AUN$A~!h?M0{@TBC-h8NcEUO>fOXl}_xb`%>nwxRF!pZlbGS%O8rKS0x${xo z;o5r`G94zIa~*q!FlNk^ojjgpaRof05Xd|4m&$F#JNk0s5vu$PvJK)dT++H{vEvvm z8+KQ~YoNf9<0PXMd7Y^@x-D5^WZeEu4lk1K?)B(Sn7in_|0(GFY?u^lNrypbkbmuRI?lh!N8iMeIkH@+Z;~Xx`O@E%0 z$2sj_B~TR!u`*N@G=zXc|7(5Lv4m5J^ey@o+0V^6+0OL^o8{70O`5Fkeja?`OdI34>u zqp)lX_j&&8?(@`1#`M&{K2Pp(EXa}2)h^K0x;o-*(m^wZt}>cyIDHFyC)V@bc!*?H z3vbmL5=kpbR~WXrrt~zaBXJcIjvn_v1Q;GA?ym&DRe1j=m*GO30mJ>z#`_z>@!{~k zShHM(_cP;@nV?y&i}x2OyvHG!_Y%Ar7xB+jh>s8NQ6CC0zgUViFR( z)Pb0seg)M1FYdg9#-9O~43FQ4-h|Zq;OjuVH19Dr@0f1#qww-AiXp8eO~m9!?8et~ z$AKH@eMZ!9FRA@d{3wj=6Jdbgmo|Ed*@w;dY19OAf!p!AVy9@vg*EjkI-Wa?-};Jj zzt;>5=|5vS_xYH<3+eF-pvs}FVS31O3zBosAtRX{-k0$GG5jguPgJmsuY<(nyBG)5 zefx(l{|d;l+Pi^}QdGliDN_y^yyg875OuZXeKx1GV9UD-U&Eeok@&IX86-bFE2K+k z7MN|#_C{=h` zi#FdquMP~j?d*~q=oY${|D1=f?mqV>Oy2N*5hz!%4-LPFq4v4Sm(@Nu-7uw;xLy34 zs=mI z4B`Igk0IpiYd0>tQ20rK9|S+p529vBKZttxkA&l!OSCTpGGG6Y#s(VTU8ZM7=JGzj zSoHB{6!A`|E+{{U?Q#petV8WP z@d#)e-VcX*pFzb!-~9d&XQ7;rzVUlKF4UH}f*GM^pC)t*eS2696|-OzjGr$(vJ(gK z>uxPRx*G-+9OvW>CwCHN>DhHU$l8iHPp|9QudC}_%~vbB2;@r=;|C!0vZQPx+4t>? zj@6m5r@jYs7vS?7n&@HRM_OA=b|FnT>2>Uwq?2+|Hs55@IjXZRJ0&;cu|g znA!WqM5T6cu(=f2UQ~HqG7Sm@QpatcR%&n@cOUqO zd0^nY7s3CHAZ7c5>r-81mxn6D{8+9~V=c=}ful$4q;brCP@&yxX(n}2l?rq+``(1B z`7D4S{YML-I6*t!v0z8oc<`3$ZqKCqbpgK-L8DO}s0`b0rrCmvm2|Dk>opXAmtb#m&Bbq)qD z0hSd`aR;jrEnHpgWUdZjd49BeO=2)%KzEbs^&vg655<43LMNl>Xrw`>YV| z`cLsvEk$o5wJ$`!hRg0NAs3>%m*M}O%Iq~;#Vb3tC3ih&v#cRJv)_WxX1@_OaZNg9 zsVtYf*L-|UohZ;d8q{PjfGA!dw=j7cIg4Q&ig!^`nC^8gSim7$qHlH@D z{^yQkpa|@NwpMh7VL~l>D*qAie_Z5L8LoXo`TO9-k(Z~zXz{X8UQUDrACB+u4f8bB z81%WRwzD+0nKqMmhSML_hgCQVa$N3cJj6MU)PjrH$sKs4+~Mwz^GOd5E+Mpu`*`qr zf@Jx|tw{AS0G14QK8?*}7%Gx4}7vn0eGP79}R1ge@tF42#;W4uX^5g1}8#{msc zWFGGSzHy$H-A)z@??!#8SAC;OoQ-78SskZpl3E^^lsY}j5$xo0J}TX9VxJp=(z#7e zvr~+TcJw4yyY)GgZ$g-S%rXMb0xFVFXW#N5df$jJJaF%W!F^#_?A?mLt^oi&TvGyw zxg3tO0*4ecJSYk9*!iGwQPI0`*h$u+O?pg4ICG)gty{0;o7%12cQUqyaAcw_k_ zXx>2XY5Y;}M=`Fa=(`M_C28hB?z;T{Azl(4@fON0l$!Wn$FD+&xK6Z9a5((Vi`ZU= zd~o|(^Y>ChMSuw0F)>ttE#=wx>Nf}E%#jOoMT*y);US0-mNX`qSMv+pYc?Vwc1!1> zAhi4aeLN=GoNGZ(cs~PBGs5jKT&x>Eh+}*GtRD`mcH*1r2}c1p<4KlJ?r(1Y7edx3 zsendq93XI#Ge2EpA>+U6RWKBi`aYLb$k_&50F9#zcKix})rE+vq6sIqRt>c-@}H-u z4DT-23YPpBx(7Q2xJ1E+s$o7P&IBdMy$xTT)K<_{*`1M|E3Tp>g!fIYDzE_;f>`$`?Q^%2~#BDgGR7%s`J>mO@yfp>$t z1g|`M@^*3|2Jix51JC05bzo!{$ze#&Fauw*6E~<_^O$R)lex8`7wtG1bFNN;$5%Fi zAwYiql@v=zmN0o+_P~02h?=w3@Sc`8^i}9e(6t+*OhZ zyYC6PUs^ZPht%v!){kx7Dg^!B2Ge{gkoZ{c{M~jISY8B`Y(+K%1h5ld0_`O9SPnZB zz!^qN$c%r7lPamm&-K9z-rNSE8K3}@zFJ?>2H(30s z&D)6|;vteg&sR1Ed4@5<;6|%1*u&Y)6-M3(@>#=47yuXzVF;KW_epW#aP6FmS$5(J z(hjg5GaVuz&%u>SxTqG-=JsVpaScY~evGAt^$!p7%v6k--4RA5^-~lOFG$Q}S#ALq ziK34xf4oejeAHS`E}>HN1K#OF@J7kO2*Zsas=Fm2RUg`mBF{wdfu#uo4( z2Nkg;!7;Q9+qBO)@pZBr7H~_6F05Z&3J@}KAq*aVyEpJd_NR==0&0tLNRmZXdn5;z zMbKf51B>8oe4SYTq7&*@Lu47IMP`9IzXBQZx5_x{SL5Q9A#-OQ;7&@8r(k^W)i6@} zr1IASczy%$G&||b;p)Al&c_KLThc4;~8}56&3Xx4-Oh7kIl;{m*X3xz`!V-;YO(kU*@Tz z5QL6A%AuIOe@98*AH;(J;nX462Z;5{UsPIBx(y!_kPDi-Fl>0Jag3Kea!4T*DT&Y(0BIi4qe~nos3^38tuwd}PQ=cCfRHmB zpNE=yrOLaFfY0z5Od{d=uw({jaMzN~Zh~Kk2H|S)pnvmR#Od;ZRD7p-zQI^;p(7jB zAB94cIfgtWgNTnGBEMdR4!P1!Y#O)XK|OgwWcfw{)suO6OayZM;6f)2%IZJ&;n6ui z0uT3Wrr+Zyq<-!mq1(BgnS6EPMUG@sc)+JEz7n}CS3;#Qp-m& zBF|xaE>eZ45Iddzzr!d1`8>JHzHKiQN2mXfum&tEjTGhcla1ao6M74xEihmjumN@e zyu43zs zDz(Mmf=)B~1gsLe!9fSpKStOLI+!ka(UfU}Jz*d^SC14+$P6=jG2s=deceuUDBuaa zlG`8>pxC^88OF^AmOoXOpXZggli&5^2{`jAfF-vhkqdmvnn`8omV!j~Zipj}x`BC3 z8&{iwkcJw$NI}{l$iBy)2j01xH9W*#5jcWJ^wJHZjAZ}}#c&F4j;}@!MRif*tCIsk z=Ydb@G1mFUm^g!yLt3Fy^5>8z!s%u62$dY>(A&R47UCiGXN7~w>ya1v>heEQ`tvgA z&uyXH^#U`X>N4oh`1%DS{|VYt_!50II*Wo=^gJbT-Hk%17`MdDEVYy0#G5$!eUjph z#$bU3akm#=b06gwaz2GU6qLrZ?+o4&Og>pB=kJsn21_*_r2sB#uqpdJ&lf{M5jEbU z{PcEP>Ra~>6$`oOvARj4wG?k=e}6W<5%gKTQrL^~HT6fMTT@Hgot-O*u(mQJfEkmS zR3jp~nzvW?`-63t;}uiOf+xJi8lRwM==F9pUUiKR@Cz-%N7=`Cu*RrYWBXgIu_jpK z>0XWRdW$vghQjF^^)}Hz1&*8eWu&8quhddAYq~m4+HzGL=kXe;?ssB@cTZLgnqW;X zQ62PlO**|vKgX-?{YO)sJ3viv%`69A+26(q@d09Ku;O-B ztkCsSZ?VSr1#5hlSL2wsSmST|0)yX#SKY@o{4&x}4}%KVsOmW5S4(yO7%IHqt8U!U zR0oTIOJyLNz$L&OTYeAJrlq2Z3Dxt&Fd>XC1%>CVB#@d8CsPIU44vOl+(N1xEW6Qd zYb5#qS$Re_F0XI@6Z-s*jQvPueY>TQE0laZ1b<|(Q>sRHKrZodNh2Lo*MW@oYW8aA zuJyeSR>Ud5MBS|d%K0m#sC#Uv8AiXMq`zL497NS%mSNBehylB^$5B5fXZ8`Hzf#jo zsdY!2gW$BwTV2x2T_2dK>bQl9Fs74O-D(!~2=VtvT2tMinmU3t%^gWiu1DSXAmQ)nS2*Ty#+ZBM5=m{o)c|nox08%@I*h`grY8)OuNYnjm#-K}d9i@*&K_J7=z5N?g-~(3 zr~#oj98^DYmqVB|@~nHL9>Sm6=~3Pr;xI%dLG%;iVl$EFx?tmrM$$NA{X*@IBJ_y_ zMj5A&)q~#qq?RKg*b|v?BrC?Xl>K6T zx?Xpj?@;5kVi@pp8SvA*fkpvXK4sm;o<`51)yz717d&is-ezzD$R(B9a7gZu9> zI5AeOG1UXp1RIcmaf~cijCgVX?%#Gc2(PwG{p%KH7Ts&pWv+YGc7YAkPR>_Gs-X1} zPErZx=dJ>6t5P_HlUq|K^}b$IAK%Tr9bj(OPOJx6Mj%*ApIV4MpMMnVJDgePmLpQq z(oqCf8czRWE9z@X-?9xq5$;^RfQPqmI_E~zrcdXn^RI_LhqgWZ0NRmbYj)Mx3Vk|f zn3Fk?({>*AMA|4;r4GbC9{c){Po>4Gfgz)?a|Y)cfg3!Zc*q1sQ;0y$`_PwD`^Q_dTd9YvUp5(C;OJFn8r+K0m;DbKNV<$c(ANUG0+{gLSR|Isu z{USW(_y@?X@Btt4cVm9}`_K^QTo$v$JMc%JbGd@=xctWB+J8TRlf=M|GhW@#5tw0rVsOYF(OokF_}_PeNlf??auBzx$k&d1)CeN zSukF1Q`t)%tceIj0El-=cmyq;^%KRP%JjzbGq4k>j-~d)r%WCV7img&)`inwlK#|w ziM@+{xMr6JKkSnJUJB?;^+lVpYhDyiCz)3t7jbGgbnnote=p;#j#tfjUD|Zd@LdY@ zrw~$KRghZWRQ3CC|LcI%&gf}?l#Bm>*M=axwsq&ZM*_x)t^iu@ey`V?kDxd7J_CT} zaA%$X($*Oa%2h86jC`Oy1g8j>!|u)gnXh8Y@fCNAX|@=~u}7pi>7P`Cv=>6=hp6I+ zJ@Bfi9HNSaBdJ1*UD2?r3nuTq>E3au4QMoIy52dG8d(wa2`BRtZeXi%5uQZKGIds2kn;qW~bk!&jLRZ5dN5$p=a&b2jHjn$dwr+yGj1vWui|@5A><`W9jg7*V9E zk6apL^R`~3)a=so-&e@!ob)X_`6HoUkEz|DPNk(wzG{Smru5jI;q=GgcF~Rarw5`F zY920>A6+^5aV;kwh&_{h*uMSys2J^Yndm;$?!569Fm4x2iN5H`uBkA;mMpdGZ8gOss$%0@uNC%zg0xbynfuod^9D zd(;dkzNJ(mroaHjQ+NUPunGw}WMp>P7jeT4*0#HQ30F0DMzGb#TNt!(40l`O{E6e4 zeO^d*I--!m4;d=buoP_*Fy}~>)rKq}1eK+Efn#^TK|E1$7iL-8aG180ZgG_R7TAmW z>DDQm=@Jl)sorM0sh*+JQ0XMSnnkX1(kCM?GAoZf?5<~VrAkT2Ne4co7}Op04G)Fi zklmEijhXI3KdNK{x=jeg0&!zX9s}g%91wZ^JM(@UK;eFy8+ft6zh5m2pP$7Fw9C2F z#>Dr2|LC}UC23a3aCvORg0L(r#el|fKu+!J(KBma(R2gXORfiPte@nZRbNfY1WsD} zWbApc%W+iV>%>4~bSZNCc^Y46E&zY;#>Ecsc!4iPcEMLY^-A`aq&X~QxLFJ+w;dGl zc~YQqx>;b3pd{#%a?M^2#TrR%$F1_w<^9Tk1Drxp7cM;rO4?EDYwx6b z9&qGA+{wXyJa5trAbvct!G1hD?8I3hiOPopFBc#)Uf`F4myh#HT>J6djW12LG4bPh zg?>D3$VfjP_~t5O1SFp1g~%1DMTpo$7=@L8E=EKH6l7!x*=!t?{hl{6DDAgX=-vZ6 z7g&bYNebM1KyIPL7`{l?agfn@E*aHddg0Y))B0!lQMD|xVAKtx(T+@Y`5&a4rr^s8}JOTF}4C*M{dvIf}aqkiMz`qBc z@XEhOu%ym6MxTEVK=Tbc!-#*+vLXF@b{PL2fHC0Tv#h|s2VY(P9BDae>BBOQKA6)7cCth010tl_36=(*CTR#Uw7=X4V2DHTBpO$}L7_oTY9#?I_5^5} zGC&RB7U|K4LTysH|G8Cr^y1v1>4j%&4d_L7@{@{QaJGDGU;NNAO+qg^X%YmgV`<^^ z11^9N^x#!irP$W}I4N+X7L?<91#Y3h;&>L$G|kJueIk7%tS)h>06t)xe)=IW1N|6ctO?%g zVVG622X&B=5Kg&00)<}820%_fK|dXt!klO&{~hBeh__I#RmyOR>f~$M*!|_)+AxIV z+bDz3T2)H+@_(pcP@GABjGrJGEDLss#S%5VZ>X6lVLx#QoU|d~NQ5uK?ywdf;x| z7^360rnaWsJI?tuR!FjeJx=;FOS8xRfmGDR+V^|Sj`KH*9n2%aP%$aj zPI(yA@Y?Un?)YAy{qNo34*TnPbaCaV+m{_gKQi2b&*Lp{KwQ&4?kGe*F9}E}(GRhyR;upY!p? zm%QQcIcogGR=e9iuVt$Mv6}i zmlCwH`Tev;^6d8m^FQMxjOzhBl4qmn6nWil$>XncB+tXw zIkfe2xcq((W{Yd|8)Rz(Ugfvaiw*)Uqv=b!`-a z-OP3*oxokge#5(7z>50F33Ld_`)+4fg7W_FkY*V40VCK8??g{9YOU965j&i26c6dJ z_K>az4a|O7s@3ut_}|giD4x=R8XJN&e(0!bbj5$3m#pu7s8iIxb}qEdqlN&p%Fka#r*7g9iwB`S!*YDEvy2@Ko{ zEdoQrF1HRNmM@A+deqp@sgFc02Xk1@n|!!>g6STI8d>_0`x&g~$oY>nMrD`s^8=p$ z_lKYx)?Zu#Hi*->AUu3*veC~HuRIjY3!jBjEvtN-NJ*jfols z3}Rtt3QH=NqKd{19JL;}yq-Xs!SjQ%fsD2Kv@zZwN6oH+x*Fj#&;(bT{^%KM|H<{! zcKvLA(`bq$rPOVYmlMHfIjEYuG@NV1Nne5H8tIzNyMVA$zrjx40gL)d zcMN;8C!%5~Meqbh1)HFPP@INWt#CI$7M@E=8Q43Z9$^q%0`&G2( zi?hL$itMt4BKy^fuFEu2ClLERXg?`?wSXsxc51EBxwZyT?{DfuwUP8^Dc*!r@U4AB z`POcYjuS6r$S?4#?GGD2@~c^-*7|fFR+{pYFSfe4*75cR&LjI!;IG*>L_WELg%2N z!WIPQU$vNxZsT?Jmp6IzIZI=CFl??`uEsZavbfZ`h0}M?KR285SK*yAbYUz_tCA8i zcDIxMiMR=OeaI3L7N7&Vx{7~{OHC&r7tcw zGO5w@Trqp7ibQ5Fa2Ynj=N;KC)l1dY0QxI4QLuZ9OgcTnnwuN#K^>v~-8 zeAA$xrWSCJa#vZwQXvQN(?GiLM$)(S;Y%caGZ$0P?RXbbYIZf&Y!^IVtNe~{-ig%I zQ*y)HLC^De?46O!x!=Gi3mcIu_#1`?awIeUDL&)Y0LT{?iFnlA81&C~<)pXib9?o1 zBPeZ+?P*Nzx}mNyvE5GcezlLKOFlvmXF3l#s>>Ip&#g3o;DG7{8iR%v@MgAeSMhPz zx{k~6Xnu!)1Hz@xpV<#t(};IE!ld{~l@I>GWIc&Al&ZA`uUY+2aPf5P6W}+i05zX2 z(d9S(N=^I9727{QW_C8&w>}L0rsfriM<~sa?F3bWp;?VT&q$vC*=))mkALL;hd;XN zfBg^t$NC>qN(kzU#PT8J1&NhMm8_Z~V)%L`GpNlL$nWBMPDue`!{NjQ<QkkJBi-HK zson@EEO-r(!#Il91%OsYh=$ycA>YSBLQI$H0z&N4(6>tOhB~id;`vJe(d92v_;J!- z=>vEo>F<#*2i8bAKJzr>Z|y`Y`5^Wo%jl~I_jC9`LcXinR|D^$YbJ%$m*czyoV%)! zjlmL284r8h3sClccoS-EOd!7aU+@4u&rV2ix%70vL-2MTT0t{1UL4b zl4U2p&Lv#~uM@>He{dmp8uQ7}WhZ<(0vsFd%7Q2mpN$8ex@*v779h z{s=zF%LhtPV`-$el`d@eAdU76NKxmbeN+mcB7G1*0me1b;4GIC&(Qw6++}W(?8J{y zT#QV{967akoku*satSwy_hw(1CoC+iZ^Ci&YkLFegV&Uu{3$WOlPuXw9*xe+ zjQe7RMk?kB*@V7Jee7grlp%QaD>JBBa;6cg!^AjutJ6+yVw=l15>105ir9@Whlkf7 zgb1fEM4)?M(A{WPVbHhuG%N<`0?`{I=}C-BxCFRx9D=a}yyxXV?Vaxo;?EX^KlMJO zI1czTxqkT@M4%f#1LXOYi#c0x@O&d~<&)kTBtrh!Hn096#**6sh2HFs4fVYjZg_|J zp8ug7m+`D0z6cpk=4V{*=B$!JGHsuS61|WNZ=Rkvg<1cZ>X?%;9t;cF_Ek5!>GHa&uG2l z)mbrOch0t~O!L6~=e>LL_ZYL?zUOhL|Ap%I?RVlvxvFijN7Q5Qf?9Dn{q>52SVz)C z6SZ1ikuvDUU(}(ONdH0H{fh|xi3-IYczZBT+~G2~uc1-7n)MvHBNdmaMk{fVDsK9t zuI}ETS|(o$Zcs&3>IMr|T`x z`^A@Pe5oU6=9fDEmr{JeHQQV4#B?}v;%hl>LFjUGG}Ru8eWxjPuWA#0ppwcy?9qK_ zMjwRVpp_8nl5>P?rP{3nSH<81K#E3=RgK_A+bv!<*hn86VWsuB)%E~>`HvR_OyV`S z+@@3strgWxwR`PEh@=uwDn}6K3g!1Z4siMzVG~LJa2tLIqN^jRm(~6X&fhgVnMMU4 zh*lna@CBW1RPezUuVXy3hc5~~r@%yvuegV7lLw!0?Y`J|BB`ITJ+!_@wNBh)>(kM? zORwN6j=B_lP>%;6v|{0l0?;>Lf5q1_wBq%Ht*k>UtanTNApY_n`Khxd&aGGeBUqBJ z7{-cy&-^ zVnyG!Kn98?gky%eZ;OQ&l7+YPZ9^@*SFrG~S%j;LH>>(X1@+^4h3;KkD67zGlB2uu ztHtYZ?Vn>O=O_61kDMX=bMzDeKkjqKs>fQ4?j6{sju-wp_MCt~`lkp`VSSyPRO6;-aCme@qI-+|8MSX2B*fo%>s8cSLdWxN(B1M4_2b1 za5Rs-7fB0=*@d^d+YMWJQHCoD*~utYl5C8@zul>Q%}&f`LT1`ZC-sQ4_7{tH-G~29 zkWB))H+-|R7P|!eXFI1Ih-B*Yz2Rd~ERsUpg#8bP??*R$_l2LkiSJI;W~cvo+!y|9 z_sZm5?v=^ohPyI3a@y9B24;CF_T3`|X6cjb!uRmHaOqQ|YQ4HH{Bc|tUTdyR{&*M8 z&GNc%-?hn~+ruFsc}o0#KB`NQoy_N&31*~M#P8>$o8G6>$HedFqkC!cZN*ssg;N*F ztQpDFg;S5wloU>1ItdKGOwM8_lc?xLpLo-I3agZNpub)cw(r@I+;(z6e&6Mmzb(k@nZrD@e6m5-9DvoV-(p}9!!HVoB7f~zzVnr|W zDB-N8PlPr-E^Rn7ea)vSv;O8oIOg!~gKk_p5GK$gJIVV%b64SyrmrB2lKutU-JHwe zk4h&y0fD!ZvvEIi?x*KZ92r<`ZoANk|y7+CE&k+U)!ps4RiuU_e}n z1?#QLzuqDho(-S|&#9-P`2VsFn)W6wap@D`mw`enAjUhwalK|U|32gtjcO;mNAbZ;-(6ZD+`0xM{P z=n6m)AG1Ilxd@K()#CEM=uE1E#wFS_cVlsaAw^Kd=vse3H&)o3AsPw56G&M`FNL|xEUk{$^tF| zNPY{e+T=`Jj!Ml-a^;ZRe4zlK8fYW{P+~L%28hvvxcS22xcOb^AG!G|{2Gt{+LvRe z(vgL|JloIoV3^O+ls1eRQSmEw%q}Bssi3ZfNVn)S8vzl_hh8A0o z*`ziC0!qasghy4$cZoJ8s1WXKeips;zdwcVj7HiggI3FqF%SbT2%l%yKsWLgE~0K);I>pRqLzJa2O=N(`=;iBO4MFpSKlTOtZ zr+?s>`q}{%|Hqj>r7}6727wj#nt*0uwz35?O^C-gl@zw?%@`WG{%g6X#kNrgj`9Fu zp+{mTBfzR0PE|-Z`tT)p8&(;_T(J`is~y}6_+ei<{B`hVt)Zin$*a?7kJn#M^1i}A9M;COwbZ*^ z7mwiXrzwidBIe;R=vUE0@vc{N#~s=9zxjGT3-Sf0DEAAj2kF*uT07MBs;#*L`+bF1 z9^i}G_O4gA4gMG~9DYWqe_Vowlr}!}+(Tr^5ImUrRfDE}eD>_QUIUnZ@KUu_y=i9@ z$Xr(D@>S;0Q&+qH#;@icN3t?*K=rD_dEtNQ&z_3MhTQLEUc z5aNHqMCUqXwhOpM>_h@sSzfe}S-?4*G0K&nn8BP^hs#O)MbP7a#s0&)eI|08J_jej z9yL^*NG1l|1`8@X1;_p&qVa;raB3i&dKnSA?Gqa+90?m>QNPGAEUiMQi!x(i*=PWd z%q%VCLmf{~H#=JhY-K6gMZQ=2So9>Eu>++@jWPSV2$V!gdU0v^ti_;q*CPt<>Y3`_ zDE3Lfj8K<1RiQuFjX5}sLP#<8t90OPDQYjNh@K!Z zC9u5YgXpN?v*04ZrZSC1qBjEo=iABOa+FY$%jKF(cktuUSh)ZBV=(wg3SXrjC@}(o zkQ#lwuVhQz8>*8t00?&SOo709NQi_9R&)rOUFnu-;IgO?m!Z|-+pY2qVyzR;jd9|y zL4>*+?K%CqW7rEP^BMH;HQo~0zaL`M-jYi)C8x&smI1D+#!JiW6Q?1N&erIO_KEeS zPP{*a--Aeq!I1wKC;rSE@#itpk`>W2bdj!-w4H+7`BL=6lvCnl96Ub~9fd?ZrM6Li zb*BdyFwFF9VK)n>2Vu}L@^KiVf;NH)!#Gif=`pC|-HBU@=pTf(^h(Xz>L30<{iCV_ z8zj#4Rz2=Uti$Gj6!n98>lfnNgm z4s`Ey((iznRZ3l8)bw4FZrFDazFP0i ze?ZaQ1@^>#`{s9|moM3~ekuMJ3+&2%_P#$g_LfNP)}A@=ELpEWQr55;c(Bb*ysY{X z=|6}bjopk|9$#`V{yt*g{0KhbX}x`OpJbZ#TiH!St?PZYcK<-NAC7M*$Azr+P1C`) z2)xMKh`P`>Lg6jb%1{Fq5DioIiO1QAb1+ce*~hD@m3-HbngAiaB#g__Yx?Trhl=bk z^}*^Q&&S|7T(uF`fJcts6P*c#r%ccbI>_b=)8p@=c2&o{=rw{;hHpX7EzSRjw$}hE z8zk7a+(fxxWzBYpI^fdBaN2fie;r-uWG;ULDooE@Cv(H!siS}+#|MtPW@0$?S~&IB zaDT42DN|o`NoH)4V`3oBqDPu)e`CkPfW1@u7du{uhn4Bl^f`cai4%XJB-Qms>Y@?| z%iTG*y+|!g*U_{6_DfJlY$tvVwIUV)Erc*T=`(@6YAf~!#*+ZelI?v(ZAq+a$5li_ z&`)7y#C{L%#Vjm4z5;Q)QK}MLM=d5OJ+pj@$VpfgxVK{=uD2YtFD2bTgrL|r^ACuB zHoGM^eob_RXgNl1*4%nHvs-p(}==D+1cG9{y@~PQ?FQk^t3y=!;#yIt73FPO(pP4uJ5L zg`q9}uKtxiTv&WNCq`WbxiJk_*}o1J5k6xXlSAWht`Z?V z`+|~J2p=8Oj{&$uy#cGo2Fi?ryYsdJNZj*Mt_X6IwHV!?ovp$r9)0-oC?78z^8_*{>=X2?!L{--s!9cD%^hrgyaa6M|LU#=18%qtSR+GQ|fsPGXD;j{<-6vLAgtf6GnXariSec zcNC8Ey^*SyWt`Y!Saz~EPQ2dm^HdhYyvIMxyE)9J)Zdz*i35rt1)J=|^WZt*bQ7AI z8KPx{Cz=s(C;PDr4}mzmKqYnqvNWZ->++*k0xoszyhF-4%Q+9u26kea@aGSMQDHKX z98MnxW(3I!v<~_z4sd`NI8YVtB6Rv+ALW2C-1HYNRV>gD_W2^U^MF71q8_4t*F(tH z>%*T0Y?&(m9u@%p>>1URnF8hW)Fv=9!JR*XSTh(T5T^oTd^McJ6c$S{(l-P@gOW>bsk&4#A`w#G6ewJOpDD0D2$cm%avQ^9n9Z7I?l% z%u&JNa3?!4RAvrGEwCG=8j+cMCtxeMtx1SNq4z?aV1zFS@R_FxpS3{LAofs6h`^5H zVGqWs#>lxU2O{NdC2#n~xj>H-Q6iolW}I&zoMdpE8#&HBYMd_@jPr#ignXc-l*jYQ zN9@G4;6&l{MQG_VAP@EN2uM&_c2om>tMNqinIY`z({=gd765<5vtW@zpry`v_g3^` zbao=oF^aGwIJ8tS!(b4%vo-nvSzzB1qJc1Ad*E*aY}yQe8zKCU0vDoZA)r5`#HX^i z&!OdiHl(6uA%Xc?2d$XxBwP;~dxDZtrN|Bxswe50p)($Y2AC~X_gsMkd7!EcC~;$+ zmzC&7}r6VE;YLhzBTf#u-vjx?D&0h2Cr1k$lbN|MTt$PZA`a7)V?eQ{>w?O{}FQd?fAT29orsTMi zXseL^eJVNNjeLr+RRX=(moi596;@ZKQz|9qFJk>ls!R#;l`?f3QXh6Qn){`;;B~v^ zj)qmj#mTOkVFFknD+O5b7F37FWtc=uwJaYLMhfYD7sX?c9w$37xJ9uDy`rJFIFQqm*naheCY+8bHJtgRbeSp@A zF7W?dWYY%#B>qDx&Ya^fFGWJS*&GK^!6AK7+L0PU|M@RsPupi#eZ682o|$`+Nw3P< zCw{v^!ATnjfr*IPowcj(u24`_##H;ndn*X{CMvJxFgt`{ej!V#>1(R`Gj#t^`I9xC zt6p*?$wXoBA&7in3nxNlJBI=YN5R2C=>;9dYK~TMd0>s3Ltv_pPLUd!zt5~!I)?I< zLl@<+{Y4EJ)`ifnOycIcvJfX0b-)i~GYE|M&rDN>3n#9cEkY1c++zO$tW@U26mGEN z<4`$-bC-Y1BtguuNT_B#2-|aFFUyd zGCp7T;F}elO=8xIr{FOPt@7a;39Yf3`17CzECan>?-hK5bDLAFTyJ#xgQ{w371}K9 z7Ep*w1pTj?6_R;bhrk7xsy4-y_4 zF*UI(>_-y31or4-o%GUdr0CW3l2H8D%DXmqo#uBiX&hrG?n700f=Wt%P6%4@J%{24 zi=rn|?@fcV`_>l%G(qT=#Y;I5D=31y1hInlps1=H>lrct)C5d?B-Q0DV=n!o{13R_ zGJgYEzZ1@s+yV-6}LZUvp*nk!Tyl)7UjkWER?-Rk^Nj5)LKP9y~WT+#w)ZT{dGl4LE39KME^zB z8Be60vNnV^724M3V|nI=aPxIdx+OP^0dnvAaQPu~x?hN2gY z5=i8QuC_2Js*ODupd!X{1I!`^_eo4QpaLS?3bqZQ310(3lZFogz}3Mu33R8j1^{5$ z?S)Z6JSt=(A$jS{O+H#aLvc@PFG5y}7%fKh+P1q8V}kWX*f zP`RjFb2&q3alBWatB$4N`uNltL81|)72f?hw+b(ovJG^g$IS(1u->^m^`8q z6GyS}@gY^C*NHYX07!&bs z76s+!3`93|9>>XCU8W`rL&!(u1* zvs+k&rC6k#=tjLW`7Y(G!MN-yQck2b!e5H5S*dWatkEdfITg!taf_iO44rc9u9 zKd1oe3>*^nLCj!5@a(TyH@PlZZ3JE6T<6X=@`*w;GkiCKvq{JukBlQ;7;2FWXZjm_ zFjD)kU(Th&3x08$Et1+S$9Cc`&Z9Vt4aAZP-+EDdku;Y52S(L|Jya}^$E1T?-`_=I z1aPl*QaFGHj)Q4bc!n2uGg3wDGr=ji<*xDoaiA;1B10s3JLf0l7%U-HiDHT!1^uzk z_t9@Tk70s0qW3!uYHaXyKJ?g5{wo;XW=OtUrj~MU@_o|0pThW`ebnZ^30~$rUG_f@ zWM>zGOxwGLgxBG(efjT)*Z*DkMHF=Z5%E$7HU!>j@PSj+aRc*8S9)Jm7C}_`S&~!M-XkS>^fSOBZ`#K=wiN9Ft8E=fQa;nVPQYZWbzpM=+SY5gN#y6Il zDp-Ckzskm%8lT#jWKR8lwBL`EpS}7A+H)_VKTcO7Jym}M9_m1!hz+UZ6cAIpWt6j} z#Q4yXg>Bt!A?wVZ(D|V=d#q4PM{CF$9m2o*p3sc8rP0Zu)2-93%8uBgMOBt{ddPae zHRp6|PPH{>jy0#nnscQ!XMr`R!Y&SW&IJVT{A1|qU z={3=_V;$}DJ6qc<|BIJpQF{l9&A;}lCG8#7wQW6Cv^&;jMXeg^9P5MDDYL83`{0>9 zi}A1+(_qzEv(I+_0YtMym(9F{^C18`vu6VGOrIH^(Ww4Tw??0NPHX7G`f#MNAvB|L z`V36tXo6WM5zKg-esQ?D89DHF4ItOqJ$drnrn%j1EsGX)&Y#=f(bLu)wWgdldul`d zjQZKu6<1uq|F5{>eOE=#^OBe7nQ89;1Up(5%~kJb1FX|$%$?EH+z`IZ!c?@iwDzzjJX#AfY#E*izZuVUwLg5ICtfz0jJOu>&)tNW?7*L z6DEYL3#^%E0pB`0LqwqVj+Q7;J9Np+NR@>@5i8Wy3CJ)l+8Gj<$e-yJ(HZlOznJ3j zp+)UIz}?W5Z5Zq1(SaG{J98Eu=)PYc=? zp+mBQG4Mw5$o!J^{2v4v77%>;)9&OFF zCR?*L&RoI5;Y%*OG{mP1ft3+?YP{^SOE1F{aB6yN{`|HcEQhPxL0np`3tP~u(1Mos zMX~NSK&RvE1%VWRT4x>Y5{d4%p4g&jD0*#I8_G*bj%qX@Ps{@GYHJtMf}s!)!Boe&%`?UcE(ccJZny@y4o5)+R`)9W1T)Z zG@BT39sh(vr|S<$22DUlN#s;8<#fI;v#zj~v7FV_jnQ;R+kwaW@mgz&b-`$B%0w&F z(XzPh{L?M9?C~%W>8vainxfkXEe58vT*X|c%WR*2`so*-tp4of?@`F)&(C~1nfXlR zQzmk8&2Q;xLu!xJ(MbXoa(NW`@8eP}ScK$m1U$%+^$8((?L8P-W`z1jjW!fPYn}vi+)#PU#@W6v*Ryu^NDW3qu?_$vXaBCQE3t z#&&kCwY`liy-~WgxaTS?yimvo3*P@qIUwH(UC^?qr_EcPr-x+ZSgBTMwiWAW z)53*mT=+qyHPvaHda*7wIdmbHJpc{vj$a^u`_jpir!MO3X{#jro4cU3vI=qu;C*%t z`HJ=F9!MecB|}U1RXt~4AkWBGWzApM+TLA>si<T2(5tK=VcT#xR03$rx;YQ8nqH_ugq2L{!?sC8}^2#11!8oDkz zyXJ~2Ya$l%{E5~?&au@B%%wz!N!0?x1Pv`yq#8xoE43^%4_(apk1lNK041GItotOW zHt5_{SdG9$=2GJWQ3sO&S5U8{7}8dE%lx*JNF@qIs0Fix4z_h)gP~&qTlG=ULJS*gheVFVlcMMnd?uFy8xm0s6n=t5 z${w1+o~soN&h9pSq2~6SPph@Phpf5P($v}#!U(~q9Uu7zn6|hJmFen)EOf^p=nIvx z=65dcBL8c(&{v2BK){xs9;q57gxpIHK=09EDH!V#z@vx=w{wLETjXK-k>Y_xBEd26 z|A`g^gx1c*b9+FVt@=faIF=sk;}lvTbEoqgK5)eHe*sKfmvDuu$EE20i_F_f%O2H(E@?7&YX_~EDyu$RTo3- zA|~kU(Bc@@(UonaL$hljzSPx$_E`{y>*^rChP2A)V``(rer95g{sbvHSsZu)dG1^x zSU}Xyxq#zbGjnrgT-KE!p;yoC>_9Fh%z*~YUpUv*=6WzyRNJ_GK6Y8SVOrx{SxJ{( z68WU1q+ts(Q5VFbDGKoEjh zgcQnPP?LxabD=(pn(6Nt^$VF|p}Eq1NN%9HAZXx|Dk0Vba@pB^wPiKWYStm1L>pHs zd3svefq_z-R7y|79u0i;8CoLsH)Mm3m)9kaZUk5wT8xporl5GILjlm@b@Dtthwg)=Cx-SzE8@HkbxFGM$~()`n`qui_GLsC|(9Qsaq z##KpU_o(Vk+GR({_h2EDs5`pS>t4ZTR&0vdGW4LNg8{hvCfGy014HzB6a)b3Ub_O@ zfvOvNvxO~sJJF^MuN#Q1=62gRCm(QgVy|V$94DAMq`0bs8+Hhtf=N&tb^-7OJ6k^! z$JEqLlip(jq}|)!0e&8Hd(QL%TY)@O6m4+gTd*zUZ5I1NhB@g;X4?*#q(gMv)@k9) zGL@D;sj!Yb;{D0aAkA1q)gmWBr9y5=A`-CKlFU!g*uc&a1>jzSs4G}f0p!EdGP_#- zbb}l5jmV%ks5TVtpJJcVn{O9K=zWf@QN$%m?L~XscvhVcWDi1I<GaHFbHt(1OAgr*-m_ExfOM5Fn&K?&+*B}JAm~(bfD_?P~M}G ztoeg)rDnlHsoP(gvl4+D&xo5k6`7ATh?Q&$PIx$65o~L3cF(I`TOPDIsI&Z8Ih#L6 z*1;3ugVpdO0&2jm!%(e%0`LwqB7a*)7!k7`c0_|PORYwdGQ%a`GG_fRw2o#SX3xOk zds*N(lN4>h#L`__67u`}WRZt};RPC$(lC!}%Q4xCLTCagFNUiP@;*8YYc*x^h~BE` z)Zt6JY}RDYKPGJtQ3_JgStVyyqN@c&jwq*&WAJH`8VIQFR%9Kv%wPe{C-b=^P}QZ0 z9z~5Eo~V(3#85+ic*ytRr~VJ$_IjYS;9UJ_b-O^u;E=^!y4*tDW8-U1dETPt!z%cBmuj$Tm z=m#EdIKDTh3lB3YCBqCJd$0$JVwk#_d-xsz21cm!SXDyK19<&-mw^=OlnWyTBKcp- zkJpY7JTS>#E>8f?e=}J8c2lbdtHLNFV8{wUx+M)Iy#mZfgH#j^M!$JX1fzs`W z1}TPF!eRdK&!koX{p;{}5q5-ZiTUl{* zQ$aRJ)xI?#jTPhwj^AX*c+qI3>Ak_Ig0h~>{)K&-ADf)a_%Iiv)oT@_^`#FnS_6B9dLPJEtJd8)^ua1fJqrLC{8(7) z@AKXS9k$?MKNi-S_@~sGJs;J$JWHS*8=I{}qJbjPN`X=a^6aAzsD&d}BvZk2RCdn` ziee25$CcTKkY#1|7xMR~%teKIntCk=U)5}p?3BKJ$R2~2FkNPGnIXh!1o+H1w@mj-EI#N}>pyfJzG zuXMk9<1|o!Q3D4B0`T|s+Ry|KU2)3ju=7!Hf>G zcp06?w`NCHjE())xAn1=QziARRhu69`~ENJ&r%H^b+*$3Y?YZvO7;PB2aOk-JmbY0 zsi08)2MC9&*=Ky%$C}-}qeq6T$*k7HQ2HU-Kl)Ox=z`vx(uHsdBAi)Gc?5$PCF~jk ziIXapk(lb%&Lbc9$-Y7S^$8=8XZ{(rm|j6T(&(SLPH}B_L7LuZ>LVMXrda-W!PkDT zp7eFqPP(TqxWAjZuF{wV@+Sm}8d7Kmzp}tU6*LP)Qh#&{fKQkEr3O3sm=B2PX;bP& zjk$*B=pp65Z^i+kHdGw@WcF=)NON~b^nR5298Ucq_iwTvjHr>!y^t-G$c4qdCrw0at zBK8HiEh}gZCc!TEh(UvCTY=p834mLBokxW8;rs-YAAlOIsR_L)FOD^2JJ6dN+%OYV z9_kYNq9@292?KRuO+W#!Q)if}27kg5^sOohznlNI>8i(D*ES1IsjMnUZx5!$6lNSV zF}VCm)AK)IeLmm-Ej8vnP={w9{^laNBHe{OwxS!HrysT#Ui+|_j|yzZtEJNDX1 zWNkIN;LdRRfrH?tz8cY$Na{JaIeawFJTx!QX!HQ6ZcDO8OpBYtGl+$TJj{h z!*F#oxe6K9XIuUtinm$YNDdW8b2-Kqm)_+*ZdOfhvHOION&{=>aVA`u%?SGe`^Pwg zF9zJG9`>uz+59eDJ+Xdx%~#qmJvMciHcj2Q{sh1~A0Po(Pv%cepWMZ!p(|hHS^gND zWY8|GrB|C$DtM-;9?c=7nJTMChn7Gnb#;Et(MY$63ZkgHPVD5p?2JoPg6b1saBeX| zNgC0`_173wi<)L7l9^GXbY*euBiZl&-e)k;{lvHN#ZfGsf|_ENn!XJF6lAU%LW4S7 zjR@WsW76}tNDleqQBjP9!BmbOlAgxnL2}Xvgxi1a+#Rk(4{(KR%17;783Ha_WkSab zcd3b${4lH-;$r2X1(lHKBQ9>mTz$z9aDy574GKdI(h|Q_iqR2G3Da2qbEd3Epk0Ns zFmtXQ^KbI!=E#deO`zQva=CZzWK>g3pG#dE6Np5+wsNS&Fi1P_!4nr*>OmxSMSmsb zO>gpR5dtTFr@y}pfWj*$K}ck{jGBRk?c#7GrS7;gqc&A}Q=5>GUoMF4B;)Uxp?Xc3 zP7O^VG^h*eigma>@y!P~JzDp={QtA}C4fy9Y5(&knIuh*1Spq^1}IPz3V5s*uNEjI zS`KMZTy<+{Q|MZnZkuqd7tj`ov4RI)xSr^u;;o2?$RVc};Dvahf>MKcAs~wUf6vT2 zZ{GAk+;zWi_xo>mC6hUxdFGkto_XJhcS4%L%XKt$QUE{~6Jv{;%%*O0>6#}V+v+}U z1h2b9Y=PfhgT#vaCOVa{8$M(GO`I?@cjpij`x3cZZk%q|b!7z&l$jvMR~lr{aU)HX z*adHUkf4-DjvYPBd^skrY7VTenop22{*N&S-O6izwx)Qa>0UISz_>|eKx}nksm*bL z?o|AlsNRXbr?tKlib85G{kvFS9425SDjGS5&Q*zSUlXllx)mV%>6h=YO2aEslVh3* zaa7wGgiz`x_O_T&)f-Dr9A_L}3cpNsj%{icTN9%mZOE`r2ywLH+IiiZCilYBKhfC5 z6@uhDwfQ9RaeG9rTYQ!M)r`xW;BWPX*dwuD3kP0m{k1QSh4Lgve8*;S0@Q-t6pLR* z4rhFdymfIjj*H`Ju5R)8Mv1t&V0iNpd5jW)Oc?n8i_vcU7b{ zLH0#oyhlM&v!HH{szdp+qsPN?yk5(Aj{j$Q^svz#*>3h;=h{bXAaU;^ug!J?_QgOx}FLk?6ac z;l+oTAotfNi)U}H$jCA3loTz@mwAmb{=yeTRL zrc=0a1^B7u@kg`=jg!UrrGor%64R3c?)p2?)=2;S>I7;VTi#@!L3qgwjVZqu%-F*w zQ8#00TKtjVrqqoR7(+W@vn9?1ypvpqzJZO`(c27o?>5GbBm@f0?;B|Ah9D168yf;c!NQaPK zjpe0R&gQ_PBg z9~q9mp)uub*f*&{6dH<}2@5g1qIe6Z*{mAQ%*7PLCPG&*n!=_XiSwPDUl1&Dp5*_L zdBWoi(wf%tdr&HTwSp{YjT~F}>imWtP~Qmfq$v{_2i!+GdIPBuu#A}kP2vavMCXx@ z_1$Y>gw*>9os}fSX2p*#8mpUW>$oT@HQMy7G12W&+uOtiPV5B#!cY=AeHEL~f)jHG z7b@;ECwuArlJ|gSa>+9CN)`%7e^3WUA5{iD5&`}tVF#L{qULLk%86==1mtBorcGl?9zhA8jo7zVg|pS(PLfET>8UJ zO}93rD5aBLQ6~1hnp|zSB24UV(@T~jcbz3WOjQO^6Eo zPP_OTt8Y3H@mH%s2%RT0=DXnmA z{8qDgpRuA+Q`{0)mMCuj%$UPavQ_e{y*j)Oh(GhSbHHk7y4nL)cilbUkgL;C#_#=T zr0Q!A;ML7NP?9?$UOTBLq{X{f8`hGs-);J-W!=3H{TpWkp3b}m6+o)^8M?cEF1jc_ zZ@EuPI+tENintZ;b7zM};T%M`1=u)WWX;YW*BlNf{A>_r)UiT;$>9=R3SxD1V=}=e z>cu}X{6x~R2gDTSAw8N6A+pC82tz{CiGKvY-9JZ^^`EJbM#E@T=qQ5Bp&y3xu#nKL zNW+SUAW@ac!u?2%DLZX=dXREDc!}$)_;qA-&(u$#lu9sJ0i_3H_oz+4G^6NVZo5^| z4kp4)WO4Fn6a+P%6eBGxj>}nUStbokSc&CRo!2Ny$2EpuUr~#U{arLdx2P!UFd3n^ zhh^$*5|~T_$(Gw&P~i%9Ve+fo%&@#O9fhYYHrehhmz|5WBOb%4=GH-FOD1wx#+Easrw|Zalk{`d+Qn zyIZN>M`2_O@IP*)el6;Wmz8A{>gPk9WGb80bXQL_w!V3SGqw(m2AAp1U+ifCvE_MU zx3pX@%wY?_8cW35n@!S4XKgL@KdF`aqg$!BqMmqCr-I@tvkF|0pmr!Jp3qqhj;%LJ z&*>c`)Yt-}fgT_cZLyn`=83&TwsQvNa3`zQMmq6_Uv2BrKcU{(iUcXVt!4aFX9YBd z-{g_Yi^*FmM#BQ5;Z36y@BETc_pBTb*u=Q1HLCuG|ABF{60kPBw|G|_ z*H;9+e(TJte_Z1?_pFaoJBd$aZj`>NSgQ1u8Iqm=0rrVBZv|35X})eINV=L+YLBRA zrh>bktfHbo96QC7&AQi_y2pn>SbornmdL4MyUY`YM;WVAIFWXcnd7FL*L<{bFd=4Z z@=qM{Z-6*dE&3l?O$*79e+Uk+kR<SXCM1YRcH*LGfjRJEb%HtE1fYSrjzrm^NpxBL+lTNfJx| zG0-I2b)=H=4{y|wV+n^=ZR?Q}DQviGEfGk+rDa&GeM-+6-eR+@GHxWP{UIYS^+;@) zm;-1wv-$H|s+`?IW#eRFh+FbO)Rl=A+!OiRtj*_b6nPdMy~bl&vGKN6>UT*$Ni3?7 zoF=m+mj009l{mdr1kqfU!DW(830$UZUTmp?6~iNf%CcjKX}OZTac^Cn6VqIY7AJA8 zIO7=5;tx*58sYOv#!?sv+z(^7O;=nF>5Eb1&^fdjLZ)MJIV2_xw{bTD`IZTkUB6TZ z*aRcR`T(4GeHH$vq^d#4SJd@~mO;iIX_@|a#;G2EE?WVG-M`ctPTLuJhQd?hu%f9h zP9!^BI>#@gn14pvaLjO#H$OWgBXo>7#%uPl7!LM2;nh|6nH2#bQ!TPdxPP+Rxt4my zBQbM|AoQxfeEb%xyrh?(U5Zy|9S)HXu@ZNkpTxwxn#NN_jX61s^~D2hl}>J&3rwUE zWq0Ww3oVU)OeXv%su3smsKHP0={5VwxS+;q)X;IKSPTsy{@1@?KJ#V5CQhd>+E3i~ zmYpMC$7UW$jUgI_s7Q`)`m{td#_y}P&VZ2k+d2{a)U!IFjXkOFO;c$yZ(x(E?$P)xtM-cpMR26}J2bD2<~)_3!9wv$!0mK#VXd7l()c_(+hKXfGTY9!@(fhb zoX2Jhw47}*qzgYw)Ok=wo3krEbNMK9U8kvho0UDH-J!i@W%I4{Wwn)~Ot5&XIWCmMb-->9*3IbdAOarbbahU_N#bUqnv0sgdwJwc#vuu$K)HsGMv^)lq)37eG z-G1_H?K{!KmMm+Mmuh^vjoqOmVWZ8%fV4~SIfZ|svA1<1*pAjg{N*0)Ho4JMgMH4{ zvivCBs_|7ewnO9Z+t7i(VPlV4_!l;|*FyC-S^0A|c8l#8locCbEchT3V?%tZs>S48 zeW;qm_u1G}7XGn~y>8(#8=G#W^4m75rzQ13Cw#hw_ zar_3(W@`LL?25+!#@T}wYrX7p@$U)c*y}WY2WL-dd>LnJH2xH4FIf14oc(B{dRn_$ z*j4;@!1~DNqq*gO^SWs5)3N9a_%sV^(D)ur`&y&2WFf&n#Cs!nClmkVO-9wtT8HVJ zJ*RP8DtJ>HhBEg0cFtBqP)b$e*nMPILbtT;|B|d zNjeL?FFN5($zr;m=(N_xze#03C-I+C*_|m*0Hx1UsVoL!06vSxrZe_{#%DX(GA&T+ zq}kte5WlT;u&+cpV&yM5*uB;z+CB%7KIULIaQ?A_J;15_9Ot(>*c*I&)WP1i^T#pF z&hK}y=?*H>R606I#~;JkC6gNyaO_Ds<$QjVm4$j;V`a4#D&Ayi|C5FG`fCgOP}C3@ zQcd{uoQThI{-A~3q}`-FCFMp}I!B+yueY$V)c9w9hlL~_#V0kYHGxPY$^3)oCXK{W z06qE)dl_4mzuka5$6-L;We4PZ#;)Ofo1M+HgI*@wM$Faz zc$b6ypz+VaG8X=@gUzrOE^@GMt$eG4)!X<=2fN?KUw5!uIki5<`Hc?th@GR)20O>t z-J;y!pfW)wV}{SZ-T77_99K99O&D1(>Oxz5Vw(Q39?IEsgq zO;yNUhTb!^?mIO0tv+4aMW~w8{cVj{N-mw$9Y8ue;4@p7f%b`QHocGfOe;bARoy?- zSfdU_Ae9Xg-=Lkb!vg;U9d5LA-fdw~oy1<+iSs&tX=6`o+rW+wSv&285K-$5wlijk zygXY6`kSMC`{YuptXR%VPO|VHHga3TITzb;wPd3OGqb?4F{oX9+xuG z87hdVc1jn~-T`)$5pDo+qlIHI#7Gi>sE?k%-Xm>zXQ0Jj(%38d(vKd3v19wy+1Nu= z^RxE2Hpj+RSbN?nRr&>T^5z5Gh20o~0(e7X@9VIBzfLUxrv;k-OYe{U3iDSj((jB~ zGPX!^_5)r-&VRC9&DDEU;k!2WnpXCTjjgww@tKW1Y2_%tYEA#z#%9{AC_ilLiaxYg zWcl#fzUOg_T}YY?lJbrfdXbn04enfYxK`sP=1cF7DnD1WqL=zS@V!F|@od~9WVHU6fR&9+j_ zQ`WAip{41H;jEG9d_mV;oHl>1ovnvoW@m6S?zOYK;TYQ4MhpLevsY{!ePFau^983q zb#{ydr0jF?S+AXTvz=|y_zXL3;E&LW79O>;H82f!w$H*J!@o9;J`Z!Mc}O38(ijYW zRlBg(!JfD9>l|#0g&#o3W8pjP&^r8MJ9`Pvs2ww(j6SzHXwG>(w4=zT*28VnG`P8p zW(IK%P!T&L|3nNn8Z~n@zC+XA&^p8$h40jfcVR>;eFWB$c09fg_559fUO-9Job9pIzHjfR4K zFciFip-)?A=rNE8=vW5`)#zRu-d!r z>{ET?xgw{#FJ>*^+co(6gTF~Iux$oU!`8fuc+f&vd?FP>cS*4hWC9T=JZi<}SKLc9 z{S(S2nsym^&SLnz8sEq%*nAoOmzARib{}Qxs4Lp+Qh>th7uney!T!*lFM;JWKHtuE zi-7!~#&5Kf4}G1Ty#gN^|LO~ALoV9w+5;TyxzV1!PsZzgB$6FzhFi56Rzy4x+9-xv zW9y4DO-}2^=b!?7B1n5Gg+(m>4Jjln%Tm~G)Yg`y)x6KTTn; zBvaonlQYnFK??OHXagm*E~nr#s@2?NXJ15)vDvotl~Uj7XrDX`jhFIUTx^zh!Y@hec5HYOd(zVRS{Lap)J(VW?@({+{CN^P zXxm~#6#>`vo=D|$ zJFwSN`41h~XQ{lg13MtfucaZPVQ;nLn0#M5j;ZcQr}B&GgvhpZnzpt*)!)~iW0n=| zIiPJ56_0U%P`EyppUbkCTC2*pf z)Jk4w@c2F2nTb4p0>M9r48^5nGv3np-B$L1h02JQQ2oAzY8L5sqANKi55o1fu?7pj z-p00CF1XdkUV#d*u_tV31WM_&edQD=UV)gA6c>tws;+EYz6%*CxZ7o|?x3X+Lk{A% zXk^d?9OVw`E%$3=(h^%}VIwYhMI$K{E$tR*50K08jl~0(<5uf=DAUwBXC1#t8?(&@ zhsU$a#+F)!qI|2>v){&+Sx-lKn$1(kVSha+(w-Im=L#Z?t+ox3TA~r=tv@-;q)Gplkx#impG?bC<>*)>qR?p9I}rudTK4 zXHpPMwqKsYuCsbjUTF1fNn!6;`=ETI>vsTW+KJZ8p#L6jsmg*YM>Q2VaoFo^-Uo z6Acaz%JojqoD}xBvk%JOI6ZYKY;IC9$}?S_{mE>hD--1%F3+xHc3m>{UzqIKmdrLK z6C7Guzap^*&9Tn>kQQ{ErTu%Hy@sR@XS*y#G0rwwd+p)u7pvz}&LX-(%Y?3E*qin+ z(=awG>};;J=y5wcVC}Wo&i-!mJZNXH>3!SYt)2CSg?+DizPBKYmW{G$Uk=}T?Bm*K zL^an~+RuYuV)6XlO0g`;UsyaZ$^AW5@)W^rN8;t8Dpf0)X4YJ7Dnn`XJ<`BZYrHl?x$tQ_TM zkcUZS*V>L|aJ71&qMq})sca+fg7O}I#_ehBMf-^jX>5jrKbp#(chI0W9Q;YtIH~_q zCqJ0N-gjCU`_9=76|W?9x;K^8xlVi_jjea_NGdzv8jPCvl4q0IGDijU0??`COFIt<7m)BBX!J#@|jtvgkIs#x~j16Nv?* zC;YU&T6dV=%^qzl@}eFqg8ua$>kPg&nX!g8{Ju8q$u<}b8-FEvYyjP%4BxMTt+lfI zH9phIe$i&387;PUa-Mc%Vv6|F8oQjsO%sXE=FN{&GxXJ6`Z|o!xfnf;FVWal9LZr3 zBdO8Ax3|`%0olo94GlLYTbEeha4@zknZJ|Fb|hn@!W0<62klb9w^~`9>*|h>W3-~WkLUk~nHf=qz$aZVywVds=Q3c@A`jHP#BGrv^hjf~Y z>JDl7vuF{k;GQ5F*Z4|~%r}2sn4_(neFl$=vlzTHE})C#-nEcin&SrB@egzM2^=zx zL<|9-#g6a_xaZ0|^ByM|h^0wvtCe4u#ICpTbxCXn=eH%XmpI?)WS?+84bG&4%JUr= z^OM-O4(flMv-=ZC>^FxVxmY6FG#L-+xWjpn;GB+*dynAUx!kSdYuzEE~@kL9?= zH4e@vtK!c{uTM|D|Mk2VvG)0v_WNDzRhU2*NeHNFJq6y!y+q&_Y-hpWn9bX-b0I_c zhovsI%$|vwAMJcjGQ|jW$!t5hxBDIZJ{P;j$+x-KgHHaIi@o9GyIkxeCwVW^k~qAV z`;y4F*_gy1a}oAw6&NREV815mbaG%cqYUu_RyqxM(n_BBi&i=_K>YR)@@`i02ys|} zjOJHJfgl4Wwbukd0>qOqEoN+^#&OQ_vBq~1Pt$qKd<&h&z@c6TxX75;$no0`h*rKN zVLZWbb~}TyzwpbctgNz&l+!fL@~NaAxx;7;k|S8dZ*sD~Y5W=|?DE*VofL+_Jw;*$ z?&*yP1aZz}<){ZI&UUcZt;f!Du!C0qw1YL+_}>v{+4xHi_ML4Y;4I<%6$g0X*msdi zK9q~&*Z7| zZ>)5#akGu>7WENp&wHeC9w}kX)N;>dw1lM&wg9o6gRRvlB*X#BZU^NhKXtHY5h^;^ zI~EFC0fw=I7Jk2-l4-D34ox9jc-b#C~P%+WHJH|a{j!Kr$>`Wp6-P*vsk+U@PWd-u3AUfpxI7sxAk6V+XYVkf|G4TAr@|ZU6yBnIJI*HTh#XEqnR@n=Ju^%A5<9paNroNT*fn-I>HHQuyNgrx z3!L9)XFu?+s5e3He0*0rIXP%y)u()GVRLBtk64b62xLXNlmash=o!H0)s(V__q(1m z#LFnZuZ>>L*?TrB|BV-mp6(L#tQ!4}4LJ*+f1NobmGDSgI8=d_EH*&Hi>Ihmq_S6y_tx821)vt4>mGJB2lg~@ELoiBH> z)powcMLP5w^l|W?UF;?&pOsAfb#pRXmE;AqACm~e%`Pv-63*mS;d6#Yall(z>6%nh zH8b5b;e%*oSt$H4^D1~E|Sc(@g?@gsymZnk-p)*LLe}+_GuZuY`HT#p7w)T8k z2797Cje5B~|E>pnvpxU32m7u)-`a!C?Z98}!RB}1D|@h&9r&Ui?2``s;T~*uM}Aii z_EJY|%$ptglJ4x&j{LFi?7B|;zV2*ACw@zJwy_hxwmbW-6aS?fo8OtQ@v^r%qx;Uz z{JTuHuQUHVlihn1-Lp+4D#9hcnrxqY0-SNAs24*dEk( zV>cbcAMVDUJ%-=ajlFyfzrHK`>=-_yE4!f!U)Gg9)P?%L*oEKNjlJ51&+NuxUHE~n ztl?O`yDPi%SpI2O_QJ9Jovy6$SiYevn|>VipL-nN>t*wg<6nB&s^j>BUD=M~_#Iu@ zp5ypaUD-`u{*jlh@bb-G!Sa8?3h+mKp7Am=Wi~nm!QuHHZ2*o1S6F(~;~2_{qj_zO zjSdQRPCqm+RkIagton{z_Hp=n#%b?rvhv=gA5F5&aiSa`m6pNCQ* zYdq{4^2=^PCei~QCL47vR4vM+-Bxq{jhns2`F1zk%lQ^J`@5aL>Sl|O^+{!0>=c6_ zlzAi-J|((8?chrQ*1;e1kn1)(jm>rP+B7!b$(Os?8Yh3o&GtJfWVxHtLr*911#Y%7 ziQnmFpCs`)Zg#DU*SXp4E{d^Ua8X?Kp^N|QX4fS1$I{qiYzqc*&1bk^5 zc98QOZP;UWs`<*npJ)RI^%Kj%HtgqQ{#qMte(E5UZ%N~kw(Ny8KDRAJ(!zOBs-4t5tbmIEo_&gcVJX=F~W;0WGuX+Yd@O3ONy4qiUiU_;-OMC~q-JBsp{ z=XS(dX9UXCLXqBPInR7kt4Rjk~7BzM)h3dqI@;VpW9y0K1*Vo?Bx4H zVh*)NKt zq|a%N)&L)x_piY96zwQFb{$8Hp3Fb9I=g8b0}3(`PE zI63OU$UVl@jSn>bgU0T)p!Q>UnwG=BK^)cwQArReU^|=sm(&xN9-ul!qqEyNc-7OB^Jkoria!yU$+#W6}ME-apg!vI`^LCXI< z`vo`zSPZWzh24>K5+pY%^FRuVCKsa-Ad>Ph41tqCW8ld{#39LJN#y=70k3O(O%lZ_ zo0C|hjidet8~-SY&2dtBp_AW-6aZpj$=`HF0Fd^JAJA@;i80-YPovyHDc_`l7^`); z>>>K5W#RMB99AT(j7WFcavbsYpranPA~lUvNoBv4xRj{z*XjI*FOux6<;-Ih%Js&vJqiizz?Ld3cfp)UCC#{WYF5-Z7)luwB9?& zl4*QHDkWfWVu-*om3aFpIFGpQmCDu;hrf%U7t$9$c$8W2N55k_}&!C%zc?c z*C#(pA>WzdFokbMPS(cPq_A5-!xSVWP`$y%m!!}Qz57z2U-&I4WDapOg!8u)HXoi_ zGWq@AC9@BBcifJ#^UssnJSZR}cJ2K2WcH>Vy>UFYGMO$pElOs;*!jcB>;W>5&)`Z* zGJDB^tQ6bm;0Ii6A63tE@=smt2DqIrcAt}PaFL~i0(bJ6$!wdGzvE)x!lia0jg0E~ zN&G1ndpwCh=wi#^S3|2MohayS%R-6+bYG^Cc-^RVd?tym`PC)SaqyfZN-3gVYDnH~MgXos&JysRrkj({K{X`5qiM@;ubMWal5y2^-((V0-P<2Lba& z2W8P;MlQfXHCTeW$@QQ%2unHtgzwVmOmAx%yBDm6_ycLUG)kbYOe5t6cG-c{SsL2| z?UqUo4Y+8#m1@4X602aBuXU3@j+%F2xl$>`37$e~7d5y%49-GivnY+dB5JncW>Ff8 zaeh}CyT(p^Zn5(l)5!VxJdLdpH6PjeFKMth&soq+D3iU$=ifDA`->vlx5-5D9m#B# zg};}~UbdWu8eFw~4Gd%D5u6j)IBIavdN7$pV{Qsv+CvR88b7)yUHecnMGUC92dC}H z>`BgVNG4|tHJ@=_pG;@KE0WoRcB*;S&Yw*t+`e+LMo}}(!9Q`aTOHK;po72dqI~mu z7fvZ&v!IG_rZf{i)3ZD{FmLw+2rKq8SdNS$P0CyP$z}H#E;BFyuKl>awcv-9AOQWp>7YzxJt|Pio zMk!($yO=t*zsJe$v~JPxK*NHyRZ+RYu6EN#@hi*r?oi zcI@U9yjy|Yox(S^W6!7Xm)o&Dbed3~%0ED3DqoDoRK5_6sr()^rcz@XzZs2bd=?th z_|I+G^J)B>w(N&AG}gKKt8FP9UEY@6<>uSlvS;0VOI!A>n;Jd*nYQds4`0xhJ?Ftg z%6mMg-`SR}Y?D5xEp0bH9>F*j-q$E^6C@=EpAb5Bk=7Zi_ajk8)(J`yNf_uvqz}>h zGE@Otkx@@3@kb2;8YpQ5{ZPT!L)82NN6JMi4C-^WjcVSqk=}-&LBlrSIz=+O69Kx5 zLLaE&w?)l%PI~$mPP!O+9(^8$DoAE4aMcj`X;JgDQ1P=JVYFWFE(ajgE^A4dcN~j;C4%j@bbq3zxSCrwkV?EQv+BV_vKAEy; zSP!zID6h4WVYx%B0V)~Tydlasi~xQ=i*i)pja#@_!^@mTK^bFhUy5~JC+yaIdpg$t zn*9w6njcT<4AS1}qOK%_8Xee_@()wkl(Cyq@Hhrvox*OmoPzQv7XEw+r9V(c zruNYkqBqL3Z2aC7%5R~Jdq+@jF;T`78&H0KI>EX_&sWf)ZYDXOoA0g@;DOt)@EU_&K{1`F`B4MlO%z zV*WQ8stB-tT=~a)G+Yd3dtgAswH#ci-<`p>cwR&K8SnXzWU$A& z;*?XML)L`i!8Z9%Y6ms#5et7pf8Ij*poeLLFIs}}yO3^f16Pdi^N^+d*n?ank9jDy z`lg5NPU5v~*bgM1H+ZPyqaNz=x`(deYv~CI`0V-<65X3N!5wd{soAJDV|RhB zZ&*4Wvg3IV+}{wh>9L!Nx9C&6hbKA`ufyqp*Z*ao=Lzvu?&EUcaiP&yzd7`+uXdNy z7tO_gSK(=^H9Kik{c`us%YAq|=c?at{P|8Ga5@mM0fG4Z-^J(06T(fWH{t(}kIyaC zAF1?5ejZcciv~fBBCOTn%lf{Io^yk*o&w0LZ{=G*}cBnRsD^hjPPa0 z!XNta0z&*Y#rvTX=-2VY3%q-ObkQZb7mIf!xsRJhloP|UKMX$}+bG~t`zmVC|A?Ns zg$fZ6{WwCRACRaMJ$%vAfd)ND7&;kfcmU69LgT~mNB-zB8H7a-`5S$Bxq}G{yaNgS zG5>S1cMmiFZ==V#zd{d>i5`M|F2citmn`#QK{|2DvW)c+S%Kf(vE^dDg1;Id3Lss> z1t6-!7afLYBsYfI`=XQaeXXx{jiyr=`(&mi4f;LD>vPvH5B2udPQm-py8#!^H?^5s zxRd143&1(RF7oc7QK*4<%sCuBzcai7U*so6AK-Y5#1UlDam0JC27{rl_7HM-OI#+;^@Hm@)`i4uKsiK{y3tb z$bfp{N&d>3Ky|2KYGr6bAXHvLody@z1oB3oJE9p`>vl{Q@>he%1 zQ0WcVfYjb$!Ql9cfR~WY@?IDWdrOL`Dd5F+xyphS6~W2Wtt2>cVsT}ux1zi<;4P~t z9uH_i0l7L@;l&nt#|0)7Pbv>q4|KT*n71HM5h$Sz8tC$RbB6WpJD#R5ssO7L2}E*+ zpn?AKQAN{vD?!8>Z?Mc;Tv4GT3$#Ol;!>)t4p&wZD(E>e%Uh`TM~e=oFt4C6b7(Nw z$2+LFy0;eu=!S1u_|h#a0R<2ZTXkm6g`-9m_zV5#=M|00EiB9%J)+09S8la?n5{ks`$vHNhg#x2Uwdrg&UMptQ*j(XwezRI|Q0A&^(!?Yt?0 zl5q3gt`1ZMibEjvMT19<8Bv%>NTQFVq3jkYt(bbc;Jsq6L64GPxDwnE^vXWovS4*! zQlL5!|C$Nmva*Ume4D_k!HEz?3BQ*&SX~;Zrj7B^;HhBP0B8c{OoUS{#ue2B0;PoW zh%v(l<&8EWEtg}0K{#87o+v<%BH_Q z=;H0KAQVe@P=kO9Jc&3Z;p*xDt-gF>ptqv*$Z)7C97+_bl3+!U7&|G6euDV92AVg*(T5gwRx;Sm4myupPdM_)*y?aLX~PxL^;P=CGPk{N6@Z}9iC787OVyp@(^$X(xOe@SyISC8Dx1) zljRKY>QohKGiMmlsi-snwOo-!csHRirGd8Wpv-z_dExkg zp2cvv0)3$FTuqfv2*lPkP#mcMq>GenRiLE2Y^uqDkh%`)Z3qb=uyql)=L{Q0_P=QG z$o!F`(bOWo;3lCMA#E-~Y9e$Wu!Zu5{R9*A@d8EQj17a!L10bZk+(Eh5~lTwuHNF1 zD`(h*P^hYAV84FjfoynO7M!Gh)8T24KUavoX2&tn&v<{3H`>9sE!NOmVJ19SINYU{F zkM9@%!pJifKCyXnl$&aZCe5s=!foCTvQRKm5&*hYp$U2i-SJ@3Il<9z+<_21q|pn9 z%1)C5;zp1OE6SuLV{xyTN$*sLPpS~=63)F~d%YHCPEB-<(V!Qas@kUQtvGx}Hx(30 zr_eABM!U&cKxY;~f-W=Ks98KFGYNh<}s$VC48C-^+w;&{MZL zbncQgK+=EdLcPxpk7YHh^F_l*@Lq`o?^cn=uHCPNj-@>BMVH{rVj2eEWI8@9_H@~t zX=hR`3%zHIMR$z9=n|QErTpf9@%hi9kA6Dx-+V2dfgIuaf;sClkivN=!mxr7bE@|wP9)gT_r?A@eUhu5Qq#v)j5((FC!@PiY4IO&m>25L&G%Y{?t?WTig z!zzN~Nb|s;B)A4}AK*K|FzSD;^@D3x-50J^rQVb9h4VY6icFM9_K=+}M6V&}WKd(|f)^%` zN79D2s05A+px1;-2M&~5?)m<@FA6N){zz<;=q_u#RS9bJQ3a)7pagdNaP-Kk)dT+cO z;qd(@lWX>uFrqL7&S#wIWrT+cJ|sS%64nHxR7!+#DS&Xi0#m%1JxY-nqNswl2%b=A zv-F`z)Rz^=zlJ`wIhO|z(C}pFeUzP+Rh##Wz_?L ziXepSH(GcH<$qNZrk6T|3EVGwa#ys@l&N(jkdgP%(( z5Uyo;y}saNN~rW9x77rNfx-d}Vkc2AlZ}WLBp|NWXrtdL(@*FFBzYaYd!KT;|p&pOpX)Ij&-fqyQI(E)t7XaNf`X9=KpRV}aBtQ=c^x zNK9#w2(!i^#F+|mip-uVQztM7AS@Ai7(;zXWkC0Uv@ElP6%^K$!v-ETV!U6a=cIvh_h( z1gNPWJJ35GNruu=BxlNk089R4pmd;DOxj|9*@IT6gQg-IEcMIyc&bECg6V7|jDYu| z{(ZdtdlMq@b;}mW>Se==r$7M4BUvVp5R2DyFFLOx?I%-ffJ(4%jbBh0E2iBSiB|&! z*;PcFvM;TP5;xMNmYQ^8@l>I8K}a%XOeT0lva96|1O$KmCIlx2`ccL?P~DG0{(hq& zw1bdk3{(%Us%rABhyu00R1}R1msgY`hg#i_f`l4V5ZJe-y2SLgpZH3GfqX`FD66DI zPRp>)DiXA6vEaZI%8VD|{~{pFqEOR(|az|IfP5PB%{o~;j zR0lwDC>5o_V2A@0=hG-N+)`nS!H{HWg~B#0XP~+|h?Mk^_n!i_O-!R=?Eg7_6Omb8 z;u+$)c$htK6eZx`hk)@XAOWT8opAxgcF;n>%909fMck%{ZDwOCkq`}n2XOA?MF3xf zLm!bNf&!g{{Zpz&p8ZJeg#9c+b0~(M(5!73Y(CqNh1n9&HfuD7-5IKs+TVA*Dx!yM|&E zbdhZ(7*tAUX+pMSRv3$w>mN;tB57y|%1Sel+UY6% zKlssoyaRf($vE|_Dlg3xlNX^>6z?MZ98$DELD$PrRL~Ko1wjXr_{a<$CB}q%N(r)| zw3pJ$$M_3!N00E27&g$GKzOA=MP5ue(Y+16pd=<-3|MF7Ho~hEii7S54FWmTNuMHW zlN^Fb7%D=??L^mLb@}*mWL%3#-4c&Lj}~S5Yx3aNOf^iGZZd}o6GEnm_=41zIxEpf z#}%JY5jdp^!V9XZLQ0dgCiIbzS*cIytI(ptPaNZm zF*%Fwvrf$NX6E9cuL_cefgzj*LxIK9&*K6l`c)P11!;4znHA;Zs*7==BjAz0fQhl! zm&taW!>|OhMWONvpc|;kQhJ4mVWzN`Hla1j>Dz+P5879_ss@|H_YT3u2-yQFIAL#0 z^lNQ~R;V~BNUITQN~DyUluFA^`RUf;9tvoh^8e_(Vg3S0Q&HiCqjY&veA}8(G~cpjLw{XvOnYORdDMS0 zhyO>Z%tU=@oNBbFGfBUel~jf*GONm~kh?CuXuu_XytpcqS2%PC*;Q{>iqWVWt0^Ck z%m-LI(_7#lHfr?9p|Hc{<1674A(Jv5f>Kr_JCJ=wCZn`TwXP`0y5o8iBsz2kWnhXz zXJw)eXA1NUNiq>06;MrX1>g%Gs%K9~hOnYATOm0(jPF$;+>27~Nx2)33O65`{aZSrbdU3lB;-$2EOnz4}T7YXF~&h&V2U zU8^Xj!&11yWZ-J(a2n9abFL6KU}~WG#IYsWI^-&d{y>~81z9av7gC3~=~PpUV3<;1 zxJd%7Cmd~Y_9rYeU4ej>4Tne*if|BysSLMagxxZTBy&3|!V$>{Y;X|a+!WH-!XX$c zFcof~?ykf$J2Ev?UW4F;<^hVzb&-)5jY6X5LZAt57fBIxoebB6tN|_~QAAIx65vs# z&nW1H%pTk!R2GvHK+z^hMKej*l)y0(Cej0IlFz}+g+w_D|Bd7i0MLXqS|wwU_R-yN zm4A_!$z;w4xZvonvZg|8o0uO_YwNinv0B|BQHzEss!R|72o0uhf=pb85P-4${t@Tr=KFCupdbicV!8|<-Ek;sia~-{ zH#7tCF|_xH{eVQ6G)I*^!>4j5%8)A68R!YB@N0BD|YG3An<>J7X9yii|C{EK3B6HIbq!OH`6}EiG$}OXs^7e z6=cYdPQ;n|Dqlm6#}~2s)(&=}g{>LvLAOhs_zgRE-3XwfXeypOQ(t`1OPr1U(V9r$ zFg8sb-Rt`|MJi|zNlx~l4)pSp_ngv?K%{E(Wf@jNAK5tD}J&0-H-37-+R^TzQ~3l z4U-P#4R}B5s%_M2f7B)qBq+JHD>Og~FUqT5f0Yls?W|pmimmSYFsM}j)m4QTiHAc4 zpXUB)m3%(Z-*B$xt6f<&Jo_VeU69C`{d(vuf8>?ey>dO%*UkbCf?&g=bC;uBw>*4r zV>-GL{ulWhUYr7+)uA?`9h>)^z6rYcp^oUOKT0zSPmx`!o+7(6{uEjCay*zhI7hYQ zm|Kh|&pP^|HJvUpo*guvue`{t9Q65o4Z}Q;zw^Ok@&P-$Pg|*;Ma8C@AEJ}^;i*k} z4%GCpCOzqf2S}?lK>-XBOejZ+_3QHreo@+p1kjTpeDsX0{u}B(Jm;B9il*Umj}G)B zC5$wCk}qn-JdkkWTFCGTQlEv7ha^Exc8W(&57#q+zgNfJQqXB{)ZcHzSLlrYb$ko_ zk?-=OL&bJR)9|#WFFM*eyx|<&?K$NIPG26lx1F4>l!I zfdBgY*5){gmTPiIS#7yU-6I;XdB9$MSMlrY^08-gd+zgYjB5Og5T7BCmD>Go_ssG5 zs?e=J4__L`=<+3|Z1}5Id&pUHdd}XpHh2Bi08oF(T~|$A7LD@ED)6Ae;;y>{6_G>k z=L*mIr7TjI{R@q4%ol*5OGbG>K3YZOKz?*chyD4HA#L{O&_N!b3F6$z7d^X~MAu&KWV*0LR@X1b?}ZyrdAsYD09v91yX#kox*9zF{c@*^E+H*O zPJ>XI`aQJg?`sEcZ0Jj<&@Zssmf=MVDB;&HbuGN)cu{c*Rm6=Um@;~j`nn`F-o+nz z8Qzaz$;fVH=v7Djez48zuFu16iyo%uxf69yvcy=pIHKpj`aDX{?DiAqLj9CiD8I@h z(Fw*`&%`it14R`$KhNwb%e|TO6*0Xi*=+ zZ*!Y%MS=xb6?+r*L;z8zW0FeY%0!wGg6fax1L}bBn{xe{VVTk$0C~D5PV26pi}8|G zbpJx|@RF-c^jIY@@kth6(uD>{N+~mCriZGF#7(6BOUF7rE?4wWJ%1BDaF0VjFO(Fa zYcYz45;IwnUk2>`RgUQiW@#q(w@9)`Mv;D%;FCv8bV=lsj5uA?PMhhX>RRQKNs2D2 z=RZXkT$u}12d661AR*8?e~9e`Z*)oIjc|1nzKE;1C3w|3qcA`Sj2OQJuk8FM_##{@ zpoo6}2!H=-eHFj2p>$Q>^2&;=337JxeHV4lN90va83)<3K;%JGHm?MsGtv^`%&W-- zA4=<(F80Wy@c08k19ixhACPTSQrPJ6Vj)83A9Mrf!87hnMZFddhOlG#(E#jA8208< zK~sPB%T4#!U7tjutI~$jcA-YuuIESERMe-d!k(g0w_{St`Jx3dv^9vz<@dzP+=$_& zkf7UX=+C`} zr^~1GU0UAS&Q}R5-WU#FPh^dsq#g3W7PvTldo}T+Z<_E z?Idz0wW&Cpe2vz)Sn%ud^iG-BO$I}XN?Zv~a3Un-6UdM3gY+c+e_hY1iTmTOpGBlj z*dw8|zy7oI#sBsF`cGb;uYp6^;h06FQ{hy=KMbV^ z`(QW`hsoh0r6%9QhkRO%H=e_l@3U($fBXB)M>$+?LJoHnmSN8Rs{Ay)K2R=_9ulj6 z-(4q8Fp!Xy2^gX1aVAn<4*+mqjLue&B781hHrT(_6t=Pa!=Yp3vjtTZJVo8?wc&?i z&*=2h^9@L2AKIqJV+J}0DRPI$j^&7Tg#JuP(|RXsMDX8gdg78dj1w$Amd?Vyf?;H^~dWuarS&Bos{BSnNC&nDocA-iL1xrTnA9; zPxn9c;ANCATA7pJQ28j~F5Sxdy^&s#2_~M0^?piu3?s-~x7=OtCcj#G zhK(*N*RIt3k)6KCx3veHHMs*0?OkaLxuV&*k<(s+Q_uFUw1m=zxSvbOF3XFgoaU=t zYpMNI3pw43(zA1Cr6b%zF1ZZ=>GS1AHVs&xTl>lW$Q!jQocU4PS;!}!$%bUFul_2( zVMr?TY2U_fCok12a55;Hu%=K)(MX#~ane>*K%^(#OxhIjC--~6W|ea9baEiMYUMzl~jCRw9jr95=6&d56^I5!pfW`r{p%10>t) z{GX%qfB%;F|1@3fuYi~+Vi8=$|3pNbu|qi4O5sSPo^1>`4m;kUioI7mk*IKblx<5&wsPd%U64zsPpo( zzi8=3g;~|Dkh?vWb{n@U;9WvoSym{uH=ib*hJhdr9Z(B7v$nbipnBQUp)u) zu#KI_B*NHrl6qN}eE17>_*r@M5Xo5GW=gG) zySP2Z3KJ3eTKAHqa)G*l?q8#h665FUz7ycK;9NV^J+mDSFU>FMP@VIE%cV59VQI!a zfS(`Pr)#WF^CNrnBl0xT46-g`0j&XV?r_hfpGjOIk45$DvEDzj#@A4nv79>6g)b;N zxlUofZ_Zdp4bf*r2fbmb?2S>vxq=yL67O{dmIPx~Wf-%n z1WT7gjiZdlQ3;J+YJ`o{&7fIdF3p%mlVWnQ-)eI4B|f>_a>HJRr}(D7Ok5!qXzrhK zi*Q3>2oXlN339J#>r;@;Ze(Ozl8?Uz8=$ZH4laK`Wx9F>h$BPS_^(;hhPp zv+1z#dUG@JI=O?l>xD*2=qry<)m?}>RSuZSep8v`J<;NtB@KAT{|HnrKR}TFB{#2(LwVlGCr;*S`VD@awlkBO86St8qDVjfUyN(}f)4 zrzoL1bYpul1*kIG&0S2#-qP59Y?fm($t1_dX6l0t*S%CXrwcRg0R&_3qv^QY`?(T# zeMD|~cA{*utivM*MK@#DD1`e;R4K-wJJ+(JnG~Nc z>Pfu(k+rcWWMOseDOGces#!n&$eJ?0yK+sw_I;VVV!1zZi6__HCJz@c>FU5G z;K?8Ivp)+#Ag2*1Uqc>}Yjl+oMl%m?*-1X_JGn&qrIXs#UVrun;rINJiFipH#elf6 zOmYeP9J|$6vbx!ppZ!B94J7r~u94}cn53Uvvb=HRk6sC(#Eam1|ALG8AucCVc_y)b z>02XtDqb_!$)uAY76Y)R9ZGhvYPvYD!@%XFm42kUWRl4gQxC7-9&-7kHo9To{6cSE z&q8;~BAEzia=v0}+4gR!_REdnW5iZ&tvE{zRn6l?i^=<6-^Q z1Eq$^r=a`XTnWZT71 zfbdcW6=#YsaR*nQ6TP<4+^U!OV(#?>wW8N@b1(5F-V08c;m|2S)2P3>3*zJ?--=9n6n>RVQqaSwr1@Wq!n{H1c!fhaRCT6~H3lH6kix#6qeDG-+_ z%Y@*X9C8z#u_NTL>IMOAxYDLl9A6)i!B?TU4;G(z*O)z&Z!&+FB34JT5Nn`+$pz32 z{@U1FS+hEJD;0#nSA~02Q=M`Fs3M+Q5=o`SVpij6I%Hr_ArD%N$dfJw`VgAd?E;a_ z_K_rmj!R(s@f=;`ODQiXQwFE*F4_`m!1j5J?eiGhhX)iWnSv*8)(&=}FPPj)kA)4# zSzg_}VlZ+k`N(TW^E1YhGRI=fWk|faId!3lm5INA17GTiPT|b8aO@Eoz zNsnmARI~1%=sE2nujI*XS`~Xk6<(JGJOPM@N@8NF*b)UAv$T{S6nnT%tk|@Nv{<=^P+Yn)icZ8H z;#s?~Xrs)W7fg{)?o58fIPY4q&Ek)&_OCc-p`!sPm)*$4rMRzo3v>Hx4{GlE(HI?t zzZcmD#`i83q``RnOjuz?&RUy;uoRe+sNlhzeWA7#Zg_nSC)ZPFxm&2IYHj1Upcf6f zRNwdsN4)WpmGx6Ocl{d#X!^@U9Ao1}iY)HGi<86wn+?q>SeYbR=v2@MPbcCXs-&G2 zZwqF}(tHiJXE6b5JP1GE_rEi}+-xDqUb2Sr!P zy%aYVMG@>3a{0g=;H>6;uwVMYaS4RK;RCECxE7uuUa^HjX~288!}n+g=x{zV5kl8* z|Iz+EJ?{)ZM?8{rxcCHn^IfjnV}pvl(iE1+SncrJp@$`EI}Y2qRg(W-p*Os zPs3lme_)_Dll7)IHsHg>ypw9Yq^072g1^*xm=K8RyKb|RJ{Otz!Y1DTEHn*R?(Vm4 za$%YKs^$3awaALdm-{wN{{%l`esyR{WRohp>paK-!qJ$u1@5gP z^%*L&*STvchZotRwS(drZ@7*5M`rz$P0}iq*4bv^yA%IOZHuD_hKZDqL4G4G zq|9CUA*FQ)0DZ?`IIB532|y=&Hvow9Y~4bwfn8>Fk0uk~b*qhlkkYYYGBScDTPD65 zu0jiKakEF6On4rjBVD9iPhmv${A1!+az;kM)qqakGqMd>-n7Ujdd)#UG&G(hT48_oZH;W|y)Lq{@ff}TO4=xQeF46L zHzM1S?E^bR2IKp_E!4a5b5tEUBD6mVe9|Nz|E@CK3svE1Rk%+T9#QLW;{P3~Jd}|@ zOe*t{MBty-e9zN%Gxp8Z2rA*U`}V!#tH%S>vr*?;CYnUsCf~kIzIxn-%K`(z=XTHf z3euoPvuVDhb-pC@fVk|T29lR=sSw%V>%G!PA~X8%B9ljeTNar*frsyT_($X-Vg7aQ zx<8>PWavARA-Jc?wUsjT9mx9~3@077V_mVHq_C+>{8$~25joqo=9N)gJRNH$Uyun5ns#M#kMT0e?WRWEuo!#bxLiFFf`!Mn8|yxxxq zXv0N{v}}&pdsL}E;un20|KazE{MP)cy0d_nk2HT-fuJX)caz9kM;W50s60CouP(rI z3Ap4+ua&qFOQ0y59zwH;htS;h;z4(D^H@BKMvFbPP2@TB+$-ro+maXpHnU%_q!YoC zj)J25Z+eQE-isj+pOc7DI0+%6e41J`>-NuhTf_f<>yJN&D1P@sykyOb7oEuhz4;8U zku*J!81HZN2vnBR2>NK&U;Rpk{&QAd`O^Lx@dh$B&?|lv0uQU=<$ZEE*)jKQN@)-2{aNi#+Ev5+(LeZ0UiOu|?`uez ziF`|W9-BB~P40lrJi9+*J-~lg<9IT9#qB@;Kla`RzRse`AAjz>X&ai71gRLM>P3sB zSTHFC5~z^0H_g56O&i(*1&XA!g;q)%(*z0>2qZ1Nrh&SPTD2=(WmjZb?d~F0L`Zop zEJ{UO>k1kLl@QQ?h*fI&f4^tWJTLcoZu-W){Pxd$+UGtwbLPyUW0zMd#5tm zXFz9-F1?p`ow@zRNdCP%qL2qmaZO*N-{VD#YYH7#x&$0nMQM22bm>0Nu-4Q#aa)f2 zKc2&wD~WvLJIXos-i8Ax=li{a*uv$0Zr|=5>&2p&a3xB9QW3Lu;@{Bc!(cVsDNVsj zj724mM|0~BnYJTI&3By-nMge@IU47^BNM5h=Fj&pGJ>uOX(g2?CD z)lb*Yv#U?)Corv=D!bib3W%%j8dI?#<4HRriyPG;d` zP^C|P{}H*kW$b#m26#r4Ww_(HdQ(rE-o@2?yl5$nR4d zp|L;Jy}#I(&*0|{p3Y%DIs-EyMh97MTnFmb+xmn3O9$XdI`?a-pR}y*wd5jR;6_57 z$`14yu{>bD$S3ZsAn@W8)(3g}6_MQYH@rCAKgL&|fs+oN4m~SY9tH+cse>#JK5yjF z`KqCV4z-|c?W23710Qe=7x*cj1&XjgcqyB|YjG~vvpiuJ{Su~A;+)ir>DYhvOs(kZ z|JLEfb+CD-x+p&BW$K)pI!M`*1nsm>Nj0ok_Hd9_S=0kM{?4V4ZWw`p+GI4y+sj9eAbau1@w8PaY18 zUO*Qfcj)v2I`Jo>%MPi00o{0$N00ikV~$tr`tMQaiRRg__6%r9x=z)AWE?Bd-WT4X4zOwrL_~T0K0(dvG!3jQB2aEr}nzhS;d|+0shdpq; z7`2_uz>{c^<$S&VWvga66#sYFwI|pNwP62O?b$7{OBy&YaV8!J6%dyIE-BDO! zkRw|-_Bh5K6&Qo3hd#{)Yc>UI$I|Dx4PB zbA!d6rU`p8wZAXxeodU*Q_yg5u3`0{>_#rT({;Y~8$eD!Ry3YvNcR+t$8m$=OwZZn znb^bi*!_SU^fGCK2tO^y4gl^dw)~!%8I7mE9I=`B3Ju1}<($OgTzbUjJwVT&PkI+$({yHB@A4hswGuA-+;7Kq~oChnFPjv^3>9 zDl)xIX+mp2FiC=-Q;7ugP*|LB%LIyWs0iE8Fnd_@B`*wB&ZrIMo z_YOP+h}rMCtxviS`wv)v7V z8M!|G#&+cME#|X>`HVFAF!caE8?HS}Hl=$%73(QWvjF78RAv97KI2-`fSmgi>R&vYFU*5G2Ca*DyDbrtA5 zSL3uZNK7^)s(@by68N9Sdm2k~Z7oP&lkKf*!2z`SNL*tQ*CBCRbGCMSS@$;qN#|xX zBS8z=u$3P&0Oc0}8^R&LvbASWLD88crDoY=OLwbF&bnnZB$dmax_96U z0O9a3o5hwYw~n^%TA89LJ8W-iKbMf4cOi%krytT)7rziZS zx9Et>gq@(l#=i0Szo3AiXYSL-=M*3wlgnx!#C`fZ5QX!=JxvY?CV9z;5FDM`4uXf1 z;Aj$z?ex)`S(sjx(BpkQxzV{-u>@2M5^F|7zpoj;R7g+wOM1f2*lS(C+THaRliY7yvw{iHuwPx!G>mg=EK|eW!$f6+!gF} z9Byq~)e{{3VdltRgM&)O#D(0pjI9sYld+&Zd8M%@hm1WrQjC=ph7;T{o5}5gy^@{q zN>lA0%ersGkdW^6+be16T-qzIF)CoMoSNx57beOhay&Bz%T!Khnlkn_VCcUx2@I(8 zYm+#(nY8wXYz61;Z;T*vbMU|dWZJ|L7=`{A>_!#CZ@H22YA=hc(gD$efV#Y*;DR55btN%+})CK@#}FdfzFeW_%>);j>H!L10((@9f{NU zGxs<~;#3(&&e0e-8+XepqutLm%((w`=n2=}LiyeC`ZnZhbnX$%7JB;_*(W8$PtQ}1-t^`*fJt(^|>L^tHeQE*XRZ(CKiHw{i+4Ora} zM$`(7sKWY3kv`X!#K%+GuLgb+_`sV1X7<$qzY=2)mui#q^bm-F=xS({NocB$ z&!&548?%P?pfIzGBgy0KYcYxxV>}a^hF1mT9_K(*ECW&L-hqo*Y4z{n>n9i&X&lLV zy^!I)S$xc>tou_y1g#@d>yN4zVl4nP~} zOisLs$v87$XLyn&9ov=3jT=uxmBV#~b@R)GDRnr$d_*>PR738GSv?Dm!1%TRA5Q6= zQNVzEtfGFmBxGlZR{%HYt|Y z=N`v+RLpTx#-oZ14id|_`GeT2nF+7qRp{0rrH}0Fo+%hNr@R+beL~94&{NCE@5C<)J zwu5gE@roMQy2ZExBU%3_&UrP}{-(XP2?tQJ_+nHxce;GX?Tbj^?c)%tkMP?^SA0V_ zSN*j0vg4#5H8%=|jHe;}TXGwX^(g?H?KvI(0@%xI2Y>15Lt5zR+`*27t8qOhQ$Ak2DwJ%^k{foEHAJy&Bhd%Q8qsjvQsKoyHqman@ zqrNYqv`>GO-#_?Hd%!>V-`gJi7&JcTeNhr$zSi$|v)ve^zi|KP4KMTXw{P1)_jsB~ zdbM)b^^>8GMs+|#z}BXMg}vI-SV46J^I>&`gZ;H#kC_v9JmSH$zI|1%FwG4QGYcxE zhj=+3w>I;Nfvxz3RvPm~YH7F%c@l`nWtxq?2riJYSLhPB-cI0RxnG_0Fcyq&&5t%) z(%sR_E~n#;KU{~DkL=G4PL5D?enmSlBA8)DP*E}Rm&a0U();TG^j*O%%F*(4lF+2mmR>Nwqzg7f_d71hfNTG^ncA0OAJOF|Q)RgH=-FSvuE?44 zWr*P&VLhW~_TrlBbWdA(ws$oQj^dsfFy!BY;}dR9jK`R3VeeNO{-m6qg06kOto!Gf z$#Cr__mVsQz`pKnOQw5QBhly{B+s?MSqk$76l(um)_pXyHq*BxhI&lL9<0LOLqK>D zzb~d?aNL`|S2+Nm?6jTP38-y^Zxd(v>k^smzb$Ht{a&WY^z(jP=)=$Zm%;I}?@nfl zC=6zR%q|CyFSCRjwfh%fIcJk7F#NHYA!7E3;+leMq2ZA2xYzS;E(dwz-Fyje^lpCL z_!Pyv*}gf?88g`9&ZphmrE)mD3`>yiB-7WqArcP#fh%CK!J&)=hSmHoW?2{gz~%6Bo>egQz@vtC(j$20YMsBG<(AT+QI53GlJoD?rH+`kc=ggsoB zFplBJc(|u5({lw()Zb<&{6>pdG`=Z!VpHzA;!Nz3rre7BDWz+#W_x1U+{pUe?pbhk zVg8pLiFxJJO7ktwM`M4&v=VbI*6v2$QjK@cDPNU2<=De!=f)P-?#1Mf8`M2NY{USYnr0(gOrgZbKaY=EyL4`A=HfdK%JIdj0l)RKM$aJ1A((eS_0p+{R|Vr=0Ei zFh8lx?l{LfT+=f1{EgMYID6+BI>UWoIgQC8w3_+Cvd(uwDSQtFCaoAD4(1*T@7zuM zRjo^wEv`KNVq642fflI(QcK#FU9n{G1m9sDs5c5Ntka0^adLd>h7%7O8gAA%tyS1l zw;OsI3)FvVFYP?@`1UiTC*Zq`Cv%qSKisvJY2o=2BTsf|RX=`#lCj^W#jwZ&UY`(O zvi~&q2}tbRdlE^wCZy?e+TY}(ZXG>gSm>LjAJ)F=FI|VZ>_)rn;QelYwcqVrwWNJj z>ykywE?Ksy^0FmYT{JPdbmj8JOWH0Hwz6<0kb;$`;m^mN;I7@mHzvE5V84$&wi0y8 z*2)LhAS7bE8$TH~R@e`#@Y5U^z43jRZvp#(BpzCCeB4s!3+`v`abbWghvHWp5jZAl z&xp#2yu&f17t7qdydNXTv7Zz zymrc1KlpCe7tX!%`!R0A{OW7RI>=*9J(pHC^{h<7yOhm6pDCOEbAAFHchzwhMvnKS zNhKiQ?}KxMrcmvR*B&VwPOe97@Ll^I*WJ0cZ}mTdas@v40>rOpbAPStexu`3QaZzU z@JPuF6v+4Z>ZjNCrOPreWy{ikK^Lja=5}8IcU0g|m+>cMbHB_^cr|?k)|uYA{`zHj zVTIOQn%gmWFYA--ybC|~A{%M1>R04;Y{Iy7flN(!hyUQi{}TRZa?iLGuu7DQ;SSg5%DQ7Tzb6c4xEP0xWSDKFn7%6AGbx>GMVa`4OQlo0 ztE~H{B;V5p3aimCrtVJXuvh4{j_REeGisVQEl8Hz}<3hs1_K5HK?*o?jkhK z%Fwg{`xnabCHJP>5!jG`rKs}VvvXLF%J!aLk?DGVchiKQreZ&6n((CEXt9hM5B53! zZm517%UAVS+Mn4|Gp_x<$tUym4AWtgM-Q}@NJI>XEw zUjW-NYb@(-f~DV3b`Nx9YWN0#B-bt*8<_?fr=as-$+a2nG2CqE~g zuyo1tR_BB>osXRfwn?!19}W(2jC_w{DecFl9De=Rt*6H0b5Q85<14$)!~zg>0sp9? z^pxF9ePj9$)JJi4(XTn)mS?uVkeG!Xs3N%;s4*^KKLJ#l#rHy{%-o9`qAF=YVUeR9 z6k$rMtYe3xe44=hKv12#mM@mI-j%^|`7pCnSuT5nXVMxP-F+PyEE-vx(>NP3s6$_( zqT)Be0*_{w9nTTJM{L_n4wd~lc_fkYz(x{muIjEr4SMJE{BUj;cIjd_STSj_<}-TR zle$ea_knEB;_+2YwJ*1?W?UT%CAakTwI`O{vJ--B?~h#jnv$6B^8&w*tm=Arsc&71 zlxl=9R>elP!`-tx-ZA--`WvQ?9b>x<3qZZx2HBZJ<0b0S)K+r>sp&V!UIuw+-81AQ!^0fn$)j$VKmkZw(Bv zBiG*m19f?8N9RB@$gnzIjXNd=Yb)+pHnb26;)tc z_C0eO;NZ8cba?Aue=?3iY>7F0?svg<@cm^Jtfxo}de$gyq(70X5Mb8 z`g_r!F*UdUI?>cS5j(k!y~$O%q+OK@2&DyzP}00TV4*A;U;9v5_au}$)!T|4f9)TG ztMT`#+|YzwRyc)$4H(VSJA6myHQ_A2CMa=p*%6YZbQ z&vgq++x4(7SCJ6f&CGyeJ=<{KH}?UvH&`Cyy|e3~*ua~VM3Ku>@2a;3p68#WaArrJ zSG<7*C>6kz*01}({926U;!35*nY{VVE>F-pu$YpL^###{ZV{ z7=P7M7)!G~$FlFFd)_ZUG)$VppQ_AE_=WBhcfUNr&3rd<@17muf|TsHC}#E+oxzV$ zP|YXHCO|pjqY`D^t0mzdja{>U-=U!U3$vo-YEs~P6CKyq_nhslefqi%H*fKUWqF3@ zX4D50c&@AToDM$@l=5R`-Ak!ld$=ncU%0SJIbHi)$A99C0`P?y@Jry{C~(61AygZ! zuIqe&2RNLv?u|mnKfso)-D4ED-=vWG;d>baLr{ZM-Nn^E!L&AY8aAa~ zhmCXny16Z|Q*IRKai`qV_}*>TgV?Y>ws=-&ME6gd`-Y+J;*7sonP3m#mLmc?Fswt&r>L` z!TvlSE)6RtK}v=DGd?L()?F+K52!!O_2$x_-5jx3+U#pH-5PeZDkra7^BOei)^&k? zy*s*J59asl3--~k*}a49TDJBk!h%x;w_o#mA}fE@`0BEBZS?5@exzFG1u`46EyoEN zI&*;unf)rOZ!X3Qob+bays4PKgO_!4KVUkjLCU(nK;S;K2vkU{zV>pckbV(vJ8{I6 zE8R2sMNTZ&)}jxpiyfuO<}mr)#QTW)5Vj zp5fjc>Y4M9Ur^690ut0SCj%1HGlS^J1N@Yt(PIawXMT-@h4hR$A05;YtAaA2<}&F zwN#p?mIAqUeA=I@yh9z8b#nu_PbJBm6V2y^ckFSDGU4;M|HJlpy0@{I6Y@-sHefpU zV_DHm*FIX-{av(Owr4t4LEshsL$-&94KGP%bK9lQ^9x!y;A~FZWqXRoV<6{{-i}lWA-TO82~r#}06y7e~6ZY<+9{uDWO7 z644ykOw^ab%36h!Eo*oP|DPXdLWJ-90?&)0aObjjUxa9)|~UaE60mZY~b&z@f>-hGP6x1;;7S zXEyUZky&TR%5}KYDl>NZA)T99m!Wz5L$(=COJ{S})FEv%-a!MGFE(J;(ISWfZep36 zhE$_bbJJSN?rEq@Kh{vp;y>C@?yR2%*CwW)u=VYJp)pva$HwwUu#LWbI{Yxgp9fG- z9K~KzT-MD~(OkIW5q#_rc+S+YtDzF6EgM`m0_gRPI&NfYpW?N%)0&}PT^rsmmEKRL zS!o*luB_X#61{C^E#cdUHfsr&p%5^ujw!q6+VZ;f*EDl6q5Vi6`B}pwx@)TU+Wc}) z4e*$MoGepS^Q58}-44FKhyF8g+S zIS95Nv3H;q09RhKwZAIsb|5p5RtVEIVDF>po;gNVx4-y7?CbfJA0M|EW5?Uv`5Bxj zfEPWTyQUdqaZk1eCNySa>D*J<2|wXk&o}K71lJaHjo{B+JnK2W1ZxDN<*esNDC;7J zayTc0D+Y3_s&Lq$XH6Aot*M4hehpTac-rL8u_rPU9!H+6`HlaC!OS~t($q7yI-477 z4l8a%R6ROfdG2Wt>uE3FgKF;?xC&qt9w!K|X$EpMx~M5{7Nen!L;K19TFv& zSr-p(Fm{;iPx&v}AMtr9l;nf1Znj8p1>W|1vqj=RX=-9+MK6KPa~bAskr4i39Q?l3 zvGyw?H38?ey)Se|@0w$wS#U0W7kX)3SAVSY-ud(fw10#<8P0m^N6fs^&Ae>wZHDuD z_T?d9wPRGm4wVHJGU4=aJFY|v)wmx*;>FH&P{amx@E>qpf1>^3>&N03U+&_%9NwT` z;!r)>SkGf)D;8MngfjQ@2Us+X^k$h}mbl`;B9IaAj1O+IwCE=1_0$*#UXsD@QH|Lr z)sAnlB4&h^(b>>;KZEqhAjHTN$B@ip*>b8w-Te`XAa0Ie7Lj znKTbY5`F^lwhCaNFEAAc?zd5%=7~Iwm4%XyPkOAyLN?@M7f zCc>As!qkz#TYa>dO7l47|crB@%_w~VUV4Y?m1JmHRkZQ_F>>Gen|8- zm3-c*rW|*=()qOo7;uwdk05sz;_|o$>{;2t#n!)(sr^OSjba13R@rub!U%V{{kvHb zyRe*}XK(7kPC&SYi?b8{knVc3__|MEDkuACbzd5$X0e~bO@m!{5#&4X6aLWg>FUP^zi8%lC>AP%M8P?<)A29-Ea6CerYSb~k6a&H`?IS`gaIa< zyqXbCZ_uj6!d3gxbX~jF8?E53J`jh!J!n3w6Brb=$}E}<2gXnA>|(h7koj5kU(Zk8 zf)g9O)B3glJNbFGy4-a=H+t$Kd#&-QRJ&EnH0#>Fy0Tjz#dW=JD2;Tltg}e_BZ*m} zO!vx4lKF&?Zgvl1m?(jn?cye(4{S3IN6uzwu8w#^oD+=A*>#bWwPhQ8;|Bx_gzT6XOhl>N0f``j&cm$arEjtK>L z(l@SLdFk>c^FVj{!ez@l+Lkn|UbLjOec8$t z;q)Pbd4Mqe>XQxSMeQrwu8J;{kA|DRy0&Ry`=X_DmaOVn-kx2ys(s0dC2jjIkDGqd z$&!9aTWZOwMQzJ2UecB!!!B94D1s|q0o?Q+e}6S66F6$(zia znX~4$pL)?ni&n3$uCAVh(@x74U9_sb4K1EoG`GFFdePE_Z5Oq-EnL>VDzm6z?m|2m zEd8io%)R$JxaB)lOZ8t;qQb>-^LP0lp5ohZJz`MdRhJ98{tZyV$0U!eYTWz_VLPdk2&b<;#U(I(p(xSe=!DZxIw`f}l7&#B2SUcHP~MwM|DQj6C09;g*uHSN4nS#~d)Oas?~|v=(HwU3t7ZJ$ zj%Dq`s(){MtgfkFwQ5P5jDiO+9J={cpDG2qV#$gF7`=S;nKY^4^49jN4wQ(Sf6dt| zmbFLoB(F&Wf4b>UnlyLO%GM=|r!TxrOoMPs4=08Jn*Kjr`d<5=I(yaJ_JxZso7aZ1 zxp7JRzJ`5FCysIDE;OoZN`#2lq|yZ zt0!4W$XwpKyl~A8BO}tEI=3D6<>jzItQj_`s{UfwB+y24S1!72N&C5N=vMn-oFR+- zqF+7ffazK>*f09~VuB_1U+^0)-=tHU+aUB;*;X>@v>6uP{_@mc%n16YOl@1XVB9t zu82p}|6uZ;bV_CgzH+-_(UJo!$G-BP+kVOwOK7EKX3ed-s8+_b%!*4^a;7%-q>Esa zA9U4)2Zx^jBs-oRV9iYv9D4rM)xL~}6Lq)E{V)5MI9C(KV?{MH94iw}7j&wTy|J+dQ|4-k&|Gy<pV1Jj;;rem$ zptY^Mv~8i;@bT952Fr2weErp@n=WoX)BHW8@S!u?9zK7~XlF>_7CYj%aoV)gl9gv) z+_9p)BUydYi6@;{b;2nf^5>-MCQUxEYVrgHOJbIjduc}Cf8(sPShiHfiulGjl<=D5(ul(_apR|u#~>@TigtU&6hXF@uyv`Fn`+42-vL( zW0@I9?+$r0^{}w}B49fsU@t_#cz-&BKMx*y$%iE)VEndRJ|4e)ln>*#it=Ht5wPwE z*ro{BT@kRp2-q_buooj>JlmgNzH$}hX(mc|&+p|hoMwImR--U~TV@sJ=V?m>tUUs@ zJ_5Em0=6{*_HYDjR|M?k2$<~%{xXl%&f$kuM!=>-z?vgqiz8sG^I*KHbA!Ta$>&sQ za^>jK;(C0HSma;h-s5Y7`|@ZIZ>PeFeRwZKz;;K##!xXJ_|qm8=I6!a2v|A-wjcu5 z8UgE$fNjcykw14SjJJ|H4W;E>@s?7Sl{##P#tHAzrRA-NAwT*RUW#`H!d{Pn6>A0k zc;g~qRS__L9*x1Dc76nGc?7I80(NTz?2ZW7eF{6$WbcqiI~8^;VOjEMp73Zg{(M>E zb~3KMw0vE>zOF(7tzb5=%(QD0)}qwP4s zF=9L+2y6#ots#Y{<4go>@kqux&RKkb@&@L+j`?;Kbx6ijON$#HdX(R0BmS)ii2v{b z;=g`?_~UgD+u!ofJ3##I1Hi8Vf9?+9r(Ax{F)c}kmRw+YJJs-(X@?FW?L<`!9v}8U z-=&9;_Vzx$}2E4xOd zN~_{iODpS3lMv{srRCuIbg=sSM92RHn*LJ}=~J5i?9svW>5_#(K*kWH-nvWa9YcBu zg!L)xXn`2mGZA<%=D}Kkzei#Hv;$E5TTq#bn-dMC$=;%d(#j32-@1|Yr8QlnQl)j* zjV`UJFRenwrC!6H$RE*EBKn|3jlw!);apN$ejcW-O|b+EjvC_c><_H+qa0A$btj#CNLU7Bte(|Pn~ zmL}tkuCi+^5gry{jAf`cKLV@BgH<7JqQbsPJXC)}ywUAQ;F6I0V#rL<- zeR(jBe_K_z*W+ErqUELKb5M82Jy{@*W7vxt*I?73zjwvk$xayqi&bw%#glgWa6Ayi zMwYb8BrW3>7l>oNofz`Uf}|lQv=3E^fAICu{r)BANILnU?*bS>w)O zoahM8*16Q}4vi(}+nxcmH2$yGbPsWk;_2cHbuosR4I^e!7f+`yo>AHy|0;AYv~!*^ zo^Eu`GfL|gkfNRJYr~8w0+^64St6YbuhebD>|_WBl4i<5q-j0CG~~_gnx-?zo2)xd zVOUx>GDF@pme$2NP-RN1(!uelp+xvRq_lYdm5=>FL4UsG~<6-bv5VUqL)R+v$Qva_j&fl^wN#7#H+DLDd&{fN#g%z zrO7@lG?A!l)Vh%yM)VfloVX=EAMk!H4?kq@EG#X*nKoQ+0jWH?dQ{?wH9anxD^YdHmyF8j|-))U0 z7Vm@KV^n9J0Q!dCTLb*2>@|6b=`~Tdz~5fV z^9Ifj){Q{>ca2Ou3AS>M;EL4@3?u;n=&_${csCvhBg~KRp;PlY#^xjCh78}FnBnR_ zvD2qnIlBgO7B4l+i(!+Snr25U54dEAZ%9z z?BxiU^Il2f*o7CS9jh=)k36na*quZdn@Z-Zoc1j+vla9X%qOX~<|%F!ap8;1fH8zG zSNKVU&nYdR1^7g~F4hK{fp?Jsp^yF~dU2U+vT@*J6>e30stY4C$*#n@xXd@VYMd)i z(r&&vS-snCGLBMbzYsyMXkB6hRWJE5{(X2Le9-&|tVUs)RAAXW80*}ku#=cp>rD9S z0`QFrKb83N43CI^hr;I*ex-po<8=!o5nc}HqG9?Z?26^l%4n+Xldmhyb3oVdH)vNR z0k2Vm%hQpVA}t?XTAngKdyY9%RG;4)D4XcXXdg>U;y4y9th^gUPulT;GGodW)RQ%U zZ`C|`;f>&k{g&sqqLut+X(b$4uHTBhd|A`-q^?ct_X&l@$j(^ejA&lEHd>wP;EUWc zcLwwu?S#dO!}T}G7c$$+u~dC+8RIK!iLcJHIgty~->&KTW%{V}7;WjRYl-*frH2-# z9ruE!cgJ$%9~vt#$aIZtEJc++geue9WJV9zJE@8HI_b-s2_8>)P*C@vHNA z0qJMj@(gt4n{Rs8Qz0ig^kgVAggrd=RuTSr_yT*(u01``3Y=?u95M3k=k#NG?q|kD$~9q zHo-we^}4PoZHW zbXdLUux6#lerNhe(Eg+hwkysfsDsUOLmUoH_4_8ijvUnZXn<9!uc8aKYT94<()QBM z*ZHfJ;l#INrIqlmxC#*Yax5%A1`h=3nFrAE+nOhNv`t~RDgA(Lc9qMX6gwCB1LF)m!mLZYu4$iUTF=*% z*S}=0nJL{EPfUz1oY=6q-g(nhZ&*oA>D0u@}jTm{xcpa$TT& z@f|2f*e?ruNhHsz&ZQm^dZl6AxA9m+B7B(-v<*xv@^(GN&8frx7d7rPcqiR}z91JeGINGHH5|b#Iz`orWf)mgBOfPzgo)ux z;RE!2eq~r@)H1?HuHG0vrj1RrSktjA46OfZg^dx2fo;fxO+nlig`J@C5$fY+eB7Bg zx{58q^!@vn{-M0|qAOX>Boz>X^{)~(Sz)J0jPZ4)6?U-YT)%(m3zl<7L^+?$D`zFj zJEXAlS$2^F-`o&OaK?dR)=w9_fF|{P#1Q5((Osz27p^wy;kY2OW%d_X8 zF9P-)>Ft+2w?*mIv5*L?$K4UI9ST$Tp5Q&JuzE>p(hf!76&-I7)MYGbD-`CZH!%WM zr!Y0UMBmO+*mWc;dIGjvR{}=Ar*3Ch!vrb=>QVCCkVl_tdyB$Oc4mw690EA>@NgdA?t(p!_KRRFH3I9W4du4Wn^#vob8G)5ZO#4u0{3n;lBA*XpECNYGdivWTtc|8GkG@~51E6yq(5B+mgSz81TbuUw6XCBSm^NL%#(mh=UVhtH^%4CZ1#CXtt;`jUFa(2L=D$PsWe8c^1gW|lM_3c-h z!`0W04{v9E=j)g-Tz%Il&JzJX&*s{1L3uuZAAH`aG>4Pt*A?gO;+MO= z5z&{_{mE(~I?g`?`e>dF06*tC>@kwPd!4aFHoA|(!ZPJ-SDI_^w<%|5V9ZGYzDaR@ zVR2AaKR?7*1l`|-J%i2hFNfWqusD)P+plyeGbXR*08d!QqDgola1X5Dc;ifzA8ZDF z#y=VnIj*|n%zULu8^q+hG46K`W&vNLI7b6vKk`k%mRu2;E9{^o=sl_QJew|POES+P z#rY%N3+6f9wISe>jDHS!hF!3*B$;QOEPR`DEvBA9pC56$Wzvdi3}nd616$C^8%q)& zh)W+M&K-&)aw+{UgNfB*GeyKG%Cg_3d2vmkVA;hUkbR^n*rV|uq3~fdI3qUK9;G)M zv`yKAw&)bVlWahQGkkgKdW&~Xg3G4y{=5l=u_IeFJ%=2V2V`9*6g0uNoJQ(c^5;YJ z19S`bMKt^NT|lbRh<;LWMg zNu|FoE_+o__Ek_|Gh}Mez)d@ti>8q$(-gBY5w7M#_-xa}ry^0K`gYw!Of%&m(zI%t z11a0>nr2q8Y}o&X(=+OJo?bG~&U(bRuuIb%$utP%`2TVQ%u%P1#bdq3D(nR&MBD3` z6O3nF@WEHb;l=Xynn90}c3RV%!88bjEl}9e1i-&TSgXR0A`D?1{&y=(#8>3ylaQB; zyWg%`$D~QVJ{Fo&%RE!pNie5|lOUpBn>E;Hlpf1!`dm;CvP%SGgO;v$H)4_PVG!hEweinq#Ae&9={)|lx;7iz@IH+{kTzu9 zUe|OP%TuYF_;6>SD4z%Wv~Fps+j!NxUfo(<|3aO{&GyNz-@lMTgJ5^5S2guBt=4p2 z-OvVVkh0x3Y5dpGKwi6JY|#DW-o6C!y`WvwR(nlFd)+#0aEC>G_a zTiavZLY z>qEFtX?i>ij^9b->&PJFIRA$Fn6WDUB`BYC$$WXrUgsj!o391RmS^LN{!truYdrC5 zmMv^pc=n&tT!U;)AKMzX{}ksfiz7Ude7*g1V$Vpvjip1e_&o)(O@hXgO0UY&Lju3e z$#xi09NshF$yHumB~SHj^v4os(U1t&)oq8A>h~r$-~K?pDZrO14!`4L^HqCZ_5z7L zk5iUBtI(2o4|1f-3ey}E%}jHQzjUk8@ynP`WlDQKqc}-lUXgx#tUxdes2y+~OI+C! zaSI!e$(0RC+p|&!K7Iw)mOnH`d3+PU@1F{YZxZxYD?Lt6gkIj+4(hkfinGI)r|K5i zI$fB1HYaMRH!=Jey=nF&JfrD69yMFlB6pd*uJKn`x-y1=(K?2Cb1P`(_?uyOJZ7A% z!;~}eK=6E)t^VOl=9?{wb0hGio`G>BzR=YnU^I2eM#cA+oqK<&o9@!M?}cf>UWQHK zsv|Bk=^wCPNcY78bQh3T9Ucge`}%}mHX(?5)z;}dl*RBNrLX;Iy?~A z|J=6r2`#(i`Z_!ixGzR<&?f$UU9#51J)VDdW!4BN+F~5i?WkjF$MN{)ty@r*UaVs* zzJ84VLO(PHSK(Y)V3?BjOV&#==QlQ;*M86l9WI+Wx#xVQS@G#^@!A{qN>^eA>{-`_ zTvgYX@T4X*7&CVG75U`^g^(sXy)bOFArqXtVL{HG(J{*T| z(qkPAFM@iFeBP!wzYX&l(-+PSTH~+#*^Kdo>4r32VSA({ey2Yj8+@k58_oWNjwc4B8 zZBz%kyOiczc=zNJXUcnd|CQRGBA@YfrsKJe7MkNyu5qeAUk%X6^Am{ACjP}d8kv%_ z0m1m^QiUE#f=;W_u}uGrrvI0HrT;`Y zJ^R#H)%Eo@y}wT-FUD|Vwx6L&(x+02e}u({0;bPG^q?%qbtQnRjxopg5QNWFR;uw8r5^ z^|FSYF%C)QYq}HgZur@1vlg3awZ?zPN7vtm9xr7+h`oIY9?OkrLSr-SP>1|IJ8)Ccz14;yh^^%qq=_= z2l^6;OQQ8VRgUm)o6@``OjE|8JpPG4`k?|y?ljs9`?z-#iN^`!O z@0P&Y4D+qv1P9^N0DooOHIKiNuk5)#GP=!RB^jG#xzc2RGxZJHEadS<#hGP!EIKA{ zy;o$^_CGa6^H}6FiM-}3%};pwhIqV2 zaefR2MfD3AU%a|PhU1BaqfptfK)GvCJC)`?50mffiZd$Qwoz;9(zY*A4}|k|^>~`X zgixq$sUMar&Qm^}w}E>H)E7)Wp5O*%Pn$};s88?Ew4Q$RbUF3(4vlxm2*^!7Z7v>q zq^HUl;pi9;MRyA5CN=)MzA}gWq%%q}^1qm8Or_;cp%zVlvX$p3o$Jkwq5F!=Vezoe z727t2GTp5-{qvO2dJWQdjg*3YJM1T(T9O2vJ)ye89`QL>iBs2t2f`(M*fA0wJ=!BQ zl-Xxf=Q9#(FP2Bc+XZx~b5$)uoQ(haR!a{wjh+b3|0@9B)q)4Y2lt3L94j{Ey~hzjeFM8 zf-Hn&iFQ4fHv)D&tTgiZE=@nI4_Wkuu9t6#af%Qze4Dl8Jxb5hjlr=yi9G8r#sfi6 zwf(Dj;7bkCB;pn;j&wm6XR3?CvM*hL2f{|%5AtNh({=k-_H9a!O>NpNT=qTtQTF5_ zDVF)3MS-%9ztG@}*}t;S;J(XqBl&J@wRWX99N)KTxi}UZ`JNxJO_KmWt2i>vm$IK7 zz#-rJH80*fD10i&_eSntZe-c9H6%i2%o(&Q4rmC&@x6Vq!5OaXn-r%|+1XzdZ1Xw=gx%S|+?Ui=NlmGLMSi z7FlMaqxxjvDLhAGo)5P$M_fO40C_$bnWwQCCtqsloyi~73I2H@`Bbye;9PIVJWsaZ z>`B z#8*cD+&l3N*owNY*qC=u&@N5e<4fxwYu!7?zLD2F@JfzDSu0exHsIaV%iB*P?XU3% zOMmq+^qK#*Wq2T*#)rsYaL=$EA2$2ycMI>n_22I=b7~n+XF|)p0g;ci;FHLrcri0F zeos^1;Jq>Bh|7LbP+VUc`(B-<8yhHx-201le%+Vv*|*fT;CMti;Mq=s-bSUz<*=x7 zqyWELarRmqPo{M3rz#HDrhkboj@=gC-_Y-*v*&G~Lms4-;DPWNJI10sq4}d{mrXB~ zC8lT|kk5BtCgfZ`SK`kd3fs&msV~NXbv%QG?%eR;FyA27P(O6eBjeAPYM(rQT>vQlBu-nXVNad+z_?2*@yQ;mKVMie|bsv z2hrtSpfnHD@^ZbhRbgwvC$`fqaXHT!HLvCwmkp790W&?y)n*-s?!m+c)mM602hcsx zvw7ZG`j+}aS`wEyM#+*bVdfGp;B%VUau^@&$Nl5Fi za=1RG`OFZZ0{^A#dG}B?1HMLa9!uPA(JY(`_FfEE?nvoXI*4xIVgO$~o57Ze~B%?-}^zvNdsPv>auGUboWw zoYkM+93{&ChJE;yhe$J5WZ)U4*K7G)8oWm}4S2<;@Ictle%c$!4tS?XYw_Dei*2=0 z_54x$XUjIigoms|G!^t-67>3&p1Wr_&*rDRj&H*QK}-^!L7s*^LXfXY!0I&a--rM^ z#64?P#i>RGHg%c3LBw6IxL*q6@?e_5RbR$x)%DN#^!hMk)J&X9X)Yv_N#wUf>G8XY zM&AVQqNBclS#jQFaiDK>e1e?0HhUc>!0dhQ-X-W`+GG<|x06p+r`f$r)GJwyf6~Sa zeQ(`X_Aujn1hYZjzcp%FNqj{fNc_mmbBoeE*3yJq&*nK6u>MteAP|>#6E?vM#x~up z@M8!U`!Os2u_XQ++fJb441y0lbDsDjdM7Rufgs6UO-X=j_JK1II13b~4E@&Rfm$VQ z12GB(HkskY-up`V*r52bEa%A*PTTT&Id4swb=ju4Qhi8{D|bnhAMv|1{$qG|biFx? z*PSZ}aGb9Obe%V5dh0?u|J*ntzNtV5N`g*uC8?SF!%UlR9O1WnCL=DTIHRoo${SZh zd3Gk8B+{+XbnG^Uc4uJCj`i81IQ(v>;0#Y2GtLD1T48-Kw2wSlpRuiYAYAC{C;oXC zoJ4VcAH;7^Q|6XmA<07fbjkrBY@B+@QWI#Vqjj6;4~gzej@I3Go!_oIC=8IQ+bLjxoGJk!hgE_N!tyWKqd0_#q! z-|LDq(I-=WyUVjfWC`=r;R>3)TT@iuU*qN#+-FW%YEhiTKI^A`U+o*4G~Gw63_`H| z{cZ|q-={dEEsp40+2bfa7}>)vJ{WkI0t(%nP2Z#G8{G1HJ{Y#mIMt!g16DCG(3t zTAtaqeqzTJ)Ro-GS76)Kj1rc8`PD4>p_iRB=mR{d%A(ejXG7Zc4$ac+5GOkJG`2J?A2(x&3O09 z2iefGIQ(iNEgm?w8cTR%s(E+E_0^i5x=zxwQhFZ?>#<4W|IWrsJuo+=K5OyWUZ6;Q zwnOnfeP+&{lGY0vN3&S+5?Uy$oJsP1FHvcYRXyu38~1aOR+Yvr571IQn~dYgxY~J2 zt3~k-xA;0%Q(iW&!2{t+w3V4F4#g&a>Ms(UnB&n7t!+D9zK|e76SHE|~9=iW6K1Xm<0> zv%}=fxZI}|uB>}MTvBx?Wz5t!m~RU3l;V8W${u(e+6#^OF!w@Z>HF8=@zjhD8N`buSn0mp32Oh{zw`IKaYPLuC z{r#j>&{s#QSnDkEKiJ#jUF=! zL)PpQO}|U3j{YL(NEybAEQie!-!QUw#LY#wBuGD{IQ%xb;8^-oZ%JfsF6tezVdPAZ zUrfr=OA-$zPE5wHQu>{m_P$~0->x`+WBu8deum{I`L0okca1nPnK(*HUte+#sGIWl zYudjQpidj1NOkC)zW$qU1E8mPTZiBepnNXq!UN&m=12NRv(oy0K=*m$TAuEcJ(hE$ z`zKhnCOQUV9`k=z^SAw@0@oUN0n^>&E)|m#6zYzbDpJM)5A82n}cUQmj#WN1`$C z4}OgPQU3V=^~x5-ao3hS-)Np*as3(Q4975I+UrX5M$k9;27MZAtBOuM5T3_>!I3_v zc3um2(s>RW%3Zn>4+NIk(Dd#;S=e|A z&g!(%je+@L3*z>yBZlLA3H{pGS;N>p&G8G+RN)nkObI^N908wYe7`MpI3WB1i6~R7qo(V zmoxT)Pc4q@M9^xcjt?tM_nT;Wz5>egi;AL`j;J0t z6ep3*Ce5o4@1}mi`y*3;+wo!0;)vX$JpMC?Dz~t^zZoUCNv74Y;RH*E=jeTQcPrqP zisRlHlh;SYXQp{I$A1#eYI+I2VUyo+8t59x2fA{-S@WFkmaExcERm}|#rfz6f1AJu z7P==(b!&et{?|y(n>}LXsxxnO^Xw1Ivnb1x6=zXE4m=yj)93EG^mn7xl<`@1D?QpM zrmchPb!_W96vuy#)~}<4|Bz?%4L^P}E`Pt0$!kdIOmXuHwl(2nRi|&ZIB08s-x0qe zcX8l!X`t(%<=F4%Y5HSrdgwvxOK1nIUE`YxlrU^hpI1G2#9~_ z2>s~ZJfwz_(E63G<&C)+nIk-ec5}oAlJT5c;4pMkI>x5+dwr}!jp81|1Q`3f5&sO5X`%Vh&q4{?Y+A+&(Dm+9|i3kJC-JniCzy(iT>KH zw5Q2|kJC}|G@ke*}OR;9Pl(vy3yAzgZg1jqMiw2Po!XkUTLa*p{7 z9tbR#S#L7m&!W5+vw#Ry_%G#@dpF=q!{3$sukq7uyx7C`yEm8FS%df@=P52-l3txX ze%m^utbtDya^laj-Ky!ox{vg{xi!GFbeL(R_kz;<(mv?HvI~$)g~>@jo%c5&gm9>S z+ZNE+qO|_2Y;@|X7dGI*VC5HmP}lP?huTnty`byx{aB10p?yZvOBRDE(6|`gjQ)aU zodl_xUJ^8)kB~NIa^F59+JbBTR#2SN`EyBWIafDXo_0<9W#~C8AJMj;+--?7L2+{z zQ1}*V*UsOeG`|M=raYYiJD+m!vf{i1gs6OF{y)QKdvE3aFA+u>{2xiso1!{)nVVoawLn6Un`VX`#$no3i_KA=QlpS`DMiO)yVl^-i?_!JKD%< zEWsx0h*os%%p%p_7utG7+?!dcID7VK^QoP=GnVL#E)RA985@6%(#*K|?hM$P>?>Oo z=Ut=xGAsLw#sA^)L2b>gvBYyls4w=}K+gil?YVSoi`>4hG~K=XSb*^RUD#JDbgbwL z^p(7PWiGDcHqKt)9C!qq&G&7VDm`!iY`Cr)6z6k+x{6)x&5a?;IyXLxZGJlI3RqrU zT_1A4()_H;So`!N&yjkyqC|dme`hV~N3iz8%>aodSRQUt#aw(yt^)-vQE1+-hZ#3zyEl3QXLCzwhrQczy8iqx+!S7aUIX5Qgi6;}s_r=nHxC zJiqCY&p4`0!c(p+Kd z5~1tHva=wJ4)h1FzM^ydeINOLE!t?OJ41BNQl&ZB%6de;8x&`6U@o7Ruk?SBS<(6b z8Ql+EyP#iba!e5(M&w)cIo8&3mIdmY*Z=+XMf=Ve5vh0FeCI38m7r_#4YsfJf5kbN zzOqfz7V0azH2#R;#w)3l@)C9W>c0B_=Y>tq%mQ_y%r+~|@2q@5r$y@>ky+@{qQuvt z^L5w0Z&#X}`Y100XD^uV4#he3UH-n3=Lhn)A!PP}60{*;d1HsG@5XHcVT7~rKT38u zPSz<-%F6Zd^`#FS8|ET%MNc8Ujc+48@}*zt{R1X)Qipw&Z%Zuku91-?blYR{7eE-{ z*Z6PvvL!GMFyHx#vpvwKy!D5W?!w&;w?+3U*Iv3yY1X^>27RK;cc#+T*FJ}EC z6UEUw)3qVSbMY79AMxMRcVpm=9_E`?oHN4x&9hxZ{#-v~;)Uq3$<>*gmF99c-=Gdj z0p6!L?spo{zJB{()-Kd9i0fGH5BmkpUdCchjuB44f30J{2h6-CD$ai9wLP4du?5@r zBd<*dmRG@g_3tAu&e4iCfEmQ3OHFq2{9A4+NZs5zRU9DYJw zfX}bK6^?P7gj3JxP)In`GU1SL8VbOt7l1bwfTs(<_&EjO=N5p^F91KU0Gz9H;gE1HC;(qj z0M4E6;gE1XQ2>5X0eDLR_`(A4iwnRP6@c^B-Ec@aOA5d*DFEkg*KkNUOAEl46@Y)T z0Q|B7@Z}+RDT)zCfA7=c)cT5*kXzS$0DVn3D?)S_m2l{x4u^!(S^)m30`Rs1@Kpui z?FHZ+1>jso42OjAsD>gE&gugAR~3L?QviN#0XRJ&;gE1{C;;y&0GFLQAwmh~rULl6 z0`Q&!@ZJLOTMEEGQvm+A1>oGl84d~O^C5UW&?vV_joGQm*5NniJQ>?T!A2Nueq?V2 z;oB6>d7%vnXH$s&PY@aR!N*!;{3e_)hVYT8=|}J#F&txl9QH)gvFVRi_%n(>l!woI zs-#}9ml-UbTNU1{@P4GXA>nNH{iRUY5~Ne5449?htip#BzDwa772Z6?0KTg5y$ZL7 z!Y!Q935O?{!y(~pDFFXU0r>3&;Qv?ven$Z~cMyg{!nvye{2K+}TMNMdwE+C?0`PkZ zz_*3qm&53lc31hFqt&Q^FCymLl&I6cD{b{KuZhBEbi%neMBl(U(+`J)bAJJNUkLv1 zns29;^E@SY5#*TV=~wtXUp5Kn!4MrrC!B{1z#lCD-w}czkN&{^Ri*jO)!$qJxXJg4 z5SGWbANB%F>zbp0kW9UDuZ$ADr3g4=9Rw({eP&m?F6w86n=}s zTPlKZ{*`ck5~6S5KP>?NSpoQS1>nC3!GEFUDOW}NyeXDbeYh$ARywZ{Ue@w|R^Xdr zT?Xt}`)9A>*L}!D{6XWdg?vl9f7k$cuNT7y(B6diaT11LYnT=Irr3Q3Ec08wUa$CD zjx!NcH2$9z-mmbf3V%1`gY>IZ0Dq_Xjyb}>lOHvRuPaCD0H@q)a;HvTR#|*bv=RQS z_+KjkCr-lY5ApeDg1;&D5)lxNH$Tot;QxwYo>-^lQ?YOw0GDx4DP5)bpA!5hWAjmO z22JLCM)7Y}`~@c3ISg`1Ixi_)#nJhQ!Yu&{ryLXi-AdT@yZaP=nZhS3{SRQECjRGb z`8A(&1YRF&ooW!R#^hdP;(t>)eUZ}PPr~`7ruG2^{(K1jPfDj$oFC?V4^zD#6(RlU z3de9Dp;_VCJUAm0&aXrCZ&3U>ik~)QI(9z#Ue@c$*pQBER-R`AF8%RFlm2F< zbEDv=Vvj2WEFT!1a0dK;N{Vj@olUVJ&DZv$0foO$8(h_jGyZ+1JiUrA@+D11WF(7#LJR$pBJIOVfb^{183YZYFuaHu;8f2Z&&g+t9sxDRl)?=Gc3S>Ywe z82A{Bs|;3tPE+{T6mH9NxxiruK4kFao9lSp3^>c#rya|d^9KswqHqi=68@raYZqDg zaUU{t+7w^K%bB6@q#|1UD-`Z1!1nho3SX*pv>BZ33co<%Dvr*t72dCKTmJWa*p#PP z;mSVe425U%=v=JuX$rUHU#sw%JUVwNyfP2|BZXHeT${mpQ{nP4Y;e++|AXUAIg1tF z%3(_3LwWM>DTVJ;xaH^HDST@l{Bgi3KR?of%+_{%Q{f+iJ;k7Ahf@p1Li}chLtVHb zVQxlo|K>}F;$NotJWpXm!g(cT-|g?$1iwDk`HX?^d)W*>R61YJE06OLQ=b1&c&$Nq z&Qo}~>VG7c@UIF#Md2qXoIeTY_o4EXA7|(<&ZDzX;h)ZD|5f4D3U4;i&RYVnk0swS0DkY1p%Ds@e7G@>4&xH8mCe7rkZ|^d_`ukN^Hu?P zT&38fVem(U;J0dd?$Gk&d`S{caR~pHf)D$u$YgCj)KeiytXH)T6!l8y4u!WVe1XEB zQTPuOUZe2R6Ahh_IuKbnqZ3X^s5}|Lua9jUZOUWq%}*y=S> zDi40C!e`{c*D8Fr!cSKE{7E>ILgg`VdV|9u;nWm>pB92Yt@(CqzKuR|31> z7}R^#IyPzeJYurRcb?*(qER;~{L>0QRpD$?z#;MEvs=-{$)Vg>O{&Ck(oC4hlg0-zof`75*)SZ^k^5!RGs+8iW5cg@vl-_Q0(Q-_iH>jYjOb95=0-)~@e zTJetEg|?irGFdz0SuN8-&6RH^WeJ` zUV?c)!%Xud&xCVvh(03{&f*aKW0)rtpY%b4mjc}fL~PrZmkbrrSO_?t}TFneF69lA$ZkP!{?1jL%Tw=*sSn7 z^5D-aye|)a+%!XHS00??5>8hrUjvsD=6rR-O+u$WHnhPon0Na!yaqVe1-8gv=DrBN zemG^|b=n?v8b4d%oq6yzfK&euCI3J6-UL3bs{H@Iq3ml|WEaw~h{%$AXGy}Ew3(K) zX&ai99j4RCq!}{FgqcYfP%J2$fEEy1SnCQf#Tw?an=Q%^kFVe zQFuS&D)%;H$wW;E`5Ja52BvyA^}=!A}G~ z0vyvr*4K%P^lAJO3;qD|;{D+=-M~)+-;ydK;g@Z9dZ~xT?^yb;LppEU z#eQ7&V+P`0Jn=b0@}+g>BV5(L{Sf>KaO%d$PkI{1_fv4{uE@^~lG8dhmd@3VqWbA9 z-?|^mod|jHHO~6J$Nn=&UgYPc$hVugltkS2KzI(9Q8rByOOU??@;`$7k<^6-@As_XHl>Ju zA7|a?v0pqk&Uzq#Kjh)>LjNKxHGTu(PCkzp1N;ygSBa0f-$;GNSr3=| zrKm`UM?Cyo=s5-*OzP&z&l>Q{z*YH*^|C!b0^d!!lOf+AE)=5A3gp8JC0|;%0(Nc+9ruAh z3!ZiP_Zg3V@z^-)IS+ps;jV1MPtfz$F`Uj~JSRS=7UjRkSM~FD6<3HSlkN&j#;7hg2* zil>Y44ymWeRX<@B^sj(L%8%R372zH>PRXh7*CeM-5khzhL0m@}M#!t@m3&8Rj_qaBBWtpBdn`i_)E1;MDxMKF5JmbK?5U2B+%Y_34*<6>6{I zPZ{u*B9i~gK~K)$3&2%7p?*Fce31h9{wDOFYw&ML{+OrSEruS|PN>H&17E5DzOMu? zEhplq>%gxyrCV02Oe=qrxy1y9wU2yZn&l+&mzf_NX1a6+N`49Ntlpwy>8x;RoQundJHwORI z;9G)kV&u^6z)Sn(;?bSKcQ@o4zz;O|-r%bJR>AKFKEaT8z-Jh|1w3W&!@$iGU>)G9 zpQOT_0)B>}ryJZnv2+ypHw^g`z%kvZ)LV1F)jkRJ!vOdthMr+?HEvh(1<6;{y`uoW zPlf#ThMq;>cN_d{=&3jO1&~+!wpB0}L%zk3UkdpL41P8EBL=?#+&uAc8@RaxcR9GZ zQ|1A1bLIb0aB~O2Q{Y<}J(r(>tNpqvzAs6>s&2rr|24>)E7iXRH&=S!0q-=z{VVjV zalH!nBgoG-PzZtkW1HBEnxq`71xVe(hAo;2~bEW-D;HI4i zK+hG1oe}VB41Ngsa)VEV{>28L0(o<0wH2BrvUpDxS;0GF<-*vjA&NleH zkPjRDhu|{|{y6v)gY*0FUZ~qjMHJsJKz`Vee;Ith;BSEE4gMDR9D~0LexkuY06*K{ z{{+9x;Qs}`*5DfsiHNMKGyS!NUPCAPVpYd?``noz}pR;06)^;1K_g_o&{Iqe--XL z@Vp`aHSq5k{F~qx8T@>3@h*bW&&A+(8~l6VR~ek&kGQ1nW`o}h`G*aDr{sS(S{KW@ zPx4iD%M8E#2znkh^!yn7CkB5O{0)Qu9Q*}?zY6}o!B>HAsRr&yq(6dxV95Uk{ND!u z5PSzi&nJ?vs{5%C-}Qz?K&$H37xH_MremhF?C3O)){zS+hv!RmY?>_KF z1|Ni;0Ygs?^2-eQg^)khkY5Bo)!^qq&pw8pZ-cKi_@&@$41Oi}jvKk-b-mb_=# zdmH2z8}fHU{v1R8LGTL={uuae2LB24FE{i*5BaAI`Co$n%;2wszhv;=fxm3NgReH^w*_Bh@SVYLG5C1NKl9kR zkK{}0HZc5tAoy+ukAgQC{7~>lgY&ylm(=ZP@Trh*G5AdIgA9Hwc+B9l!P^Wz7krAr zhry3D_$atpe)%1(OX^NAu4gL)HjRs!{ezU<}0l(egZ-U=%@IQb*X7E3QKW^~9gTH9-e}lhj z@VXIEAePiUZSal3pEUSZ;BOdwd+>i4{EOiFz!S>fp5U7s_0?Cv_cFKxzK_9M!CMX9 z1|Bx}WXV?;t+-`Phx`;neirzV20sD(1cN8R#k~uqpOeA641Nmu$p&8leyYL04t|!w z&zAhLaq_Dq;0q;KF>d1$CjR+d=sDNWa|QS^gI@>!s=;psztP~!!S6Kq1K@u$_@m&D z82l;8so!PrpMf7^MC>KWPxQ1GuR*`5=eOV=8~Wb?U*FLGSMbdY{t@^-2LDv@6W80` zNdNUu5nxGO*pS~0yxrj2fS+jaog}CJs=*t;8#ZwV{3Yl)*^oZ~e7?aW&~vV#=MZpx zkq?5I2)@S9GX=cc&~v2ZOX|L9$R7i~!r*c6iwxcmew)FEB;VAN9}3`$+{t5|20gDC zdd>v@y}{1||BJyFOTMbEZBusuOTY&Vel_@FgWm}K8ye|$2jrI<^7n$bZRQU5hu}LJ z{Bh{t&d~o;$iHLge-ZLq8}h#b-{0WB0dF_>@4-6_{vLS3;D3{RRo#eT|G&VO8r+f# zQ#9XY@Qoy2QkOCGZwYy8b9cIZ0rFQE^1FgxXYf71zi;q;!Ot9mwjesvQOLR!>jjc8sr#p4=OvJT$IyQ{M^R{djd<-1zQEx7 zL(ln!o-p{O20s{jero8M0KU%`-09N^K49=}@MVUcqa|Nbca0J5N#J)IJO%!M!8715 z89WdEXM>*#{x^f4A^EDhTMYZpg?yb+e|`siCxc%GzKOxF0&h0>4dDA5{C4mO2ERx0 zRr;PQ<%NeJ-)+dR08bnIY4EJUUx5C4qoejRc#FZ`fSwBtJ#T?uV(@ptFE{uH;OhPm z6|a9vzN&745$=D%A2j%e1@Yvnx_=sc3-A_W#Jh4895Y`bPhu9(-ei?*P7)!FL1S$>4i|HyC_B@O=#) z0`D^TLEy(2ydC@?gC7CjZtxl4NrN8+K49<@!G{dq2Y!md2PI!sx75goImpj5>3jM8y z{zJhJH+Tp5p$4A{-fr-jlG8lcPRbJgJ{Izm4EfpMQw%;AJZ5vt^nWK(0{Gu|MbY;BKapCewXAM8P-_V z{gUtDxzOhk$sZdx+X(kb$<=KE#UG!O9EV(r*!qR!2YAB$wdA&kuLj?~M2Gn2+u(Z{ z{C&y89zFk%yxGJ5Bl#2$A2(kpp0eI9hW<^#8x6j-_Jf;M*GVyGuUo33qSF zvmU-b_!kX5Vd!Zx_`#5GG57@VqYU0Dd2T&(VW1n_5Vww&{Ctm{CrQ4{!&8!9@8KEA z?^w^6ezx-9#&FF#Rq|DJJMQeZ=nTo1)Xg)>@44XWUTF2ycfgk#@|S_%YVfPTe`xR< zz*iXjcJP-CevjldemCrY2=Z?j@+-jKGWgTre=_(B;2#?NW$^zR{0;C8w^Av?-*16$ zY4CT!8w~ydxNY!%f=@8`f5E33e8UAId|FpE_!g3X$!#S4HC6I`Jp2O5zwF_UNq&Hb z@3Byz13mmg$<5MbS&vC>d*uHtx#QvEPZcQS;YUjz_V9ZoZ}#vPC2#TY^-mM%P!B&& zavVl0`Sljb&C?o|^@ikaC6fHlt-dP0+dX_x@(CXPkmM6R{J)ZSczDm(1d4h1jgn9D z@IOi3<>8Z07igM?FOht@hu(bQ_JZWH(R1-_&k%pgLh0iBN&Zb26Mvj8`B@(RJIT-X z@J}Q^$HP0%6zE(JzgY6c9{z#kmw5P2-w^1#9^Nkbr5-*=yxv2}65@>|?~U3BGS^E! zsZKqj`d>eke6r@My?RaZBQ#ff{w}$?jf3vhg2LS>i5pAa8>M)cG6McYEY-lKe;y|4{Oo9^OV-q0uVdW})<-BYCe! z{&~q~dH9x;bsDXsJp6dckM{8INq&rnzbW~#9^Ob)@OU&puWlx{vCwc6A zRPwlo?{dD-Guy+nk|#X;Ny+DU_^uZSJxLFrFL|Gbuavxann>Bd$Av-# zTSANReM0i$=@F%;;oCwFE+s3`^Hs@D_So~HQjV15HQuYi5aPi*k#*+7BZ45n$iv%y8{#U%=V!=nW{fhrf z@>4u~B~{IhR`JxFvL{Scvmak7d0y*L^6OER-Dr7vM)HD3{^|g}Qu0xc{HFnY-^)a} z#nXMto_GNNuH^GQ`kxKp))JwAfk*!M0DiyZ3$^^-@YexL{qsqf_;~BSaS*c_@Q-g3 zZ?uZ16I+$Q_k{et9{E|s8?E9gyDcHVoVZ{9d{D|4Pw^@FmnA<#+pqY>mka&H(|U>@ zB>7n$`O_pn$HO0z{5%hTU-I)ke9tRHxW)H{sc?^!{5u}`hb6zr!*{<@=($AmZIM2` z#K&7hIz9IRKbN>)x?LNf=U0*!PaEz9J)2$SuV+W%zS%Xbr)hmQ zM9I$vSN9$$z8rjwAwO;z>*+=XpyXrV%ME@Zc>RW!{3!WffscS6%RgHU*Rp=K-#!hV z1#jDk!71QBBJP)eo($mIT<0%8g?MAhd)eBcKXtvoe1^F2?;><;Q;=Uue7v;;sZaMA zf&Vx_{?|MD=c~U$ekIm1ZRpwM1`fA=a|Vic68B4o3yC+Dy!WjQdTzOq^(^0l!O7si zB;Hu^KDfidU%5%}>+0~Qz9;szn+3l?^Rpn(bc;VfTk@N<{HO{yfH&SM^xUH5srw{9 z3nVYzdZp6g4&vjjD?I7HDnNeQ+l2l*w0@;$67liY_dI$Q1jyem`JGx%JM7%(cA;lf z>uCa?L%h-Q%0DXka*v+P?-24{ew^g@X!#iQ-!J(OJbeA{3qAL1eh}oFC4bPv2POZZ z=IxNboA`KZp(kGJ-zoHa<)=vgBafb|1Nh%0S8r`9&aiacCBprhC)`VkHIc7%Hu@$uFv9zSk=zrXy+k{3_=D?L99;F~_c_1l`AIlx^IZa48p>ve69^5Zhe zf8*hw5wFLyrC+-|$oj2anNo3+pUK4iR`51(C4Un5YJ{uw zF9zSnkY5hIwZUHo-y9s>HR}`bjSar*BW&mThMvQ~Ekpif@D;EVKU=|ihJ)85F^&##EB`P+$)x72NFmZkK(6CmIEW7f0M&~qX2 z@z#a9K2ds}50D@KB3H?ukuQB+4!P^dEK_!34PdMDg;Di)^!2$w?e+{5Vm6q?0GyuzV4@Nk14+s_+sce z0eTJ#;7RZ`kl!8h-vX~cl!3~(w}Ceq{8{jBa1~$c8UOUzh`1MS3=M@ZbLeZ~YngB<6GY%bE+m47?Nk67V(P zSAhQ*eDP!kjnMxV_=+Q#tMTau&vUqKP^?BW`+%>Q#_|V4&mg!pgZV+=w-IkFdEcvA zk$MI4ZQU%dX57ZTz~Qbu(#;+4**(m4y$8Msd~5#M`VROqaJ7-?h5-H$`0`n-;3?Su zLI8gYe9_S?|2xS4lXzpv`)ZZHc6`yFw-A@@*RiYz&7pM?_;Q1P3w#Z@nyJ4FeD?9I z=K=n*UIA}FMRE=7{EWC?dD&p4Ki@on?-IZd4B*iKJ~@C-58!i%i*&P698pvU)}!EU z;Bcq4#m`xOnIWG6Uk$z(>GKr$$XwPR-H^X`{srqZ{#M_z*d5e8R-pGn+L|0MzZa_H$kg%!l0=g|QEJMd+YzX4CrU z;H$sN`c?gZF?iGI%-i_OdJufX;J*Q14!#xSH~BT&xdOZ$JOW<-bp}fQDDVdGEg=6* z@Fqk4R`521{|3Apd}rv{^EIR!ILxw+C$7>EqVg*dz<+(9|2+8s^sh1OSpse?V(k$G z@-Of<@K*51>ul#DaCFP8EcgoWe?$HT#m``{5%?3}E5SDf{{#4H@M+*%z5#!o$>139 zuYfmvgTWN=Uholc6>cGbe;0faaJq_SngMXK}Uw*q1 z@@CL#X`@y3$(*Y68HbG1LemALG8LC+TJ@dK|C_X~FwkGey zo^LVO6P}v{zU+MF>dj&E!Nq72GNFP(rC*ZS}u;4<3JMH%@ zZ}MxvSAUP?)jY!o#K&9nwLL1_!~P)bd|2}a*z*o?VUMZjpg%HSb|nkm3VXg4z+VIJ zzQ%3Oq_>4Vr|EE&J?9g@)_O>DWzURvI9yZD!{GJTx$PPECzdz)RPYryu>7;I|B?Xy zI{4z7-S)@c750B!+o|k7m-w~T1DY%Qr@Y7Zn0kHy-hG?f{(lGXwm-8T>-%o|&ko=} z17CR;%OA{N)_cV3@$b^FcLMmD06m*i!4&zVemQG79?F`D`{_R%@*{@)F!)OFbD(E& zfS$_(_$>kanE?J<;EARAfv0QrRh{Hy?e z0rWTB!v?m)&d_EUl8|;@9!YL@_v@5=0JY7 zTEqI6Kfr%)yb*sN3%=q}{(G18`THB-tDoS%|G{6@-QZ0>VW8~%jnV_I#@CyE0Doa% zbQtRGiQvngVLkJqKM&sUEQ3u^Vs9c|51G=h#{&2Z(9`rhOH*|rKOZRlFYw>WFMIrr z?HmE00QsZ9R~Y;}@cI{7P{}_GJ{$aG=vhVF&;EZyekJ5jh5YV+XM4I=GElq&d?mQj zKS111e-`p>KW9DDq5paC#o*h5+aDsI82nQ3l?MM9d<{4?XY$j~FZypkt9x}z{(CF% z11KZO_Uji64g*htH@w7Pd+=`)Z?xV+uCc6xz&{A!y&tjuHt2Eipt-okJXlATG zLVkqCf8uit^4mclv!0c&F<1SKZ-ZOZFBYF6l*hM;H(G!7=L?xpzXXD|C;=7 z*1w3_6Y=>Qk6X#GRm zsn*MW6QJk!0etuW`0F{6xCnO*kDC;`0ph+d|@vmYN;6EXv06a}9C7df=V_{+QJBADzzB zEtH?P1LXfhT*PZRRuT_{`~=Dvg0BWY82k?KhB^-7E8shjoRIGZkAhDGUu^JU@RbJt z9`Q!&zuNxyq31#3e(CUBfc(3XtJ!hOLbuP_gu?UFvpexd%PW7Fbf~BCvG}Mr$o?}R-1P&-(VGSEZ3Fn6*ZlKILxBAL#2c-Rb-YwQnMYjOzaiVN zb^u=mzI-F*>IA|s0{BMbSWg39=%VBg4d8j=jn-z`o|W+XY??Cg^Vgds@5lcbz~4i- zE6_pP75cYcpY2?2@MhwTmKr@ z%FQQ(cVlDC&!8t6z`qXOuq_LsxwV!C@Vmk5w_|x!_tta7$6FWabZ9`lejgzJnc`ny zJ-a}D$4y1L?Wxn}ZP-6Y^1U@z_2He8e_8XJA^)l5`)U3b_~gxm{sTSy0^%Y)m+!!W zzk@xu1n?)pm(hM_@!5R?e&9Xg3k6Q z!;%-@YNK{?Y)tvP(K<-WtNz$=0sIc)B7N43XG73kv)+{QhiE+yBK^0Za?)rWrup6A zgT$qtM%L2~exa0a)ACBs!;(+%@IOi3q4{{|S&ufNHdXhU%Xh&3Z-S42tM_0$8K7q+jZ(pK%O@zBV!t!co z=Th*tR_2%D$<3%<6Y{IE@j>0!K9{&(y4?x+*%Me#Gr~QT>NTNf&1B|{s2{EXZC zBi?9D)BbuG@j965Q#z-txvD|FOWe=SR|EL!0KVr=@Gp+Us`~9{@HKHZgogR@^BwTT z3Ff?zz-oV@=05Y<&OuS1HKIW81VCn`=!Ih zkY7CD*7G3v8gQlOw*h+g*oEzxJ;-{x5$;#PmxE6Of0ekOJv;BpdKL}4_2j`Eu!G*{`l54CfR*3p_P`J*L2*2B*tF4DOn%l4>qT8|L-v;S$S=Xj5v zk0d`y^DR+M+o-)1`WKI~epSDnNSw}7Yx$XwzZvo?4f&_Q>*ukauk)AnvC==^&G)DF zScF@@koj|vj}vdS=IC&H;IBI*@6-G#$bS~VyBma_el33x^!y-z??~;ju*W)`6<-Pc zHw5q|YIhs00j+;L^mhjEImCtjWnX8-=!RP71@Prk&&gUp4fEyavjE;j?Pa5t@yK5q zz~7X7M9W`Aw{6YaqV~^gkfwzpmxa;^3``UlQS-q51tA^8=3(m-+2H7Q7nrd+oz~*|!)x2K{rv zXP?jfVep&48!lk}6Y#n(i*VH{u4TQ8cKlSy&(iix$G?6Zz+3hedWvs_RPp-0qVKZ&FX6{CiTmZB zONo!S?$Y^iAL#i^^4mT9!2N~%-5!3id z5BBc|zW6EziuZsox`w%$VHr{K*D{|8{f`j$v;WBe{%in$HGscKT&DAN9PahV{|!z4 z;qFCT$k*S(^6KWn40ywB%#|-L572WR@kZ+c?XeU2G3#04shTF+k4^Oof5bed%;{aeturP1>8X2~z} z=t&S4>DhD#C%`$-|4riKtuwTpZQwTr$Ug(V0(#W^Nn42ZFaJL4{|f4X3&2<3&0Ni- zJVo3uzdaYge-1qj53-(3`OBIR=5S4ZFL={KEchGP6N`xW-mK%R{5~xCtsZ_U@kVQ@ zPES>@ZW%@Xe3bQ{gmjxkywSQ`%g;c#PfC8J=1R{&%|iZa&3_3!%Ot;6^Q{oy!&`*? zbG4mELjJpw7vB=PBlw>r|Fzbm()^39{^`G806&yCooCm2=E9yO0rIyK7x`@j>7)85 z?}FDq#tN=d>2{F6J!caadX__8t>@kW-mrr8WT5An06o7BkpGByqji&x7rMpPnFssZ za}RN0&tio85z^s}0Qubx@s~e>IGx}3gd06n@Y^)cApbl=T!g#kDGpGboNqmh`N%WO z)wm!_T=^PFBfridF7^#B18l(e?cg^cKKQa;Al_(wU)%E;{xTEGUR_CgNJ!-d| zWvTRU=-_bc-(mUFx8nz968FnjM+fi|19)Em9|_>62Jo{3`1t|+q5!@$fL|5Bmk01S z0{Hltf4WTz;HL%f#{zicB!B&f1@LqLzaoI&AHaVfz_*>u`KRf>oPXXzemjV`U;b%_ ze1pYVdM3tYqr@Anhjl(j_t!f22*HbQi~l<$9_r+97hx&(81P-EFkihXgF9hQ27ED= zN*xrKM~M5``BVVkXsW+_3-LzlF>SwU$KN16-a1*=8%M#OXqVuFnyYqvG4V$0ajoY# zPFCx$#6>-`ay$M>jUx`9#(WKU6i*%xz5+|1s$N`4`CS9JOpi9Yi0o`_FVbzjAA9(bl0WX@rx6$7 zHeso8JksZ4;*Hi*I^1pXul0`fxBpATg&qqTLHT_G@kZ-utw-5^E#y~YDNV^gqVych zkF1X;Uj<)`u2l0jZ0M#l{q5PBxUi@GP*$)L;&nE76S&$x`7rnj@C4-lLVUb+o=&%Y zz<29`zYO_q@FpzbbwU0c#K&9T_vpDVK>i)@MbOg(J-hUBxF(+tz8vzCAb$q9bvUQP zJn(y!9`NhIKMUZUvpC!)EH$e6nOg$*Mn?(1tKCv`lP~iBHIhFEuUeL>Z%;T{$Um?7 z!La9M;=+$B+xe%fH{>50j$uA>1oL;%kG%wZHkNF5L%6SlFTw=aZ=nC6V_DB^Eakif zekpi&H|zf+^t=z=Hk0{(;L%g4!W4G49mRYb^y^*$pM4_p6|nQb<5|7|Q{R_C{w(kn zX_g<4`2HGvO_uqOV9)+1u%6|oFjxDRE(32XxaHTQ2?|+G=P}p&jlmmEW!?chH#~{u zM^0z{Q>+6HgSUN)`KGY*r{LX~viJ=3XG5IzbYI5uX~@q5UxA^kiq~`Ci>_w*t&z@= z*{o;Twanj#oq6JP&k{rOA$61F=WgPD?aQ-L{^uU~aDw%(e2{;-5f$s%#QpSK2>C^i zv;5Kivy%T;bG06NkK`6gTe1K756O$KCD{%3 z?2r-q$7y-xi&n`u&|Kw{q~sfFuH-M2d}Gb`hyF(;-$Zj2-@i(}ndbXJe)l0^&*qvd z{WBz2tHG9~^5GehZ>8mx{(B`?wQq6H>eG^Mqve(U*CpRhbJef=Q1UNmuH?5E7IyBS zx!SjIjOedgJ8G`%X_E3gYp&9NrsTV5uJjiq|Dxu5AbqZod^gRN{wE}F&>Yhe)@zcF z*IeoUo8)_FuKcw}R@lF%=1PCB=!zpUj|zI|8neKlA5w;vJV z?x%Sx^!G@md9?%57zQug8XTcAELRk|0c=XG*{{Wy5#MeEBX4o2zR39 zP0-&Vd57joeu3nZG*|XqFZpE6mHZ2mcWSQ6qg4>$PSIS+JCb*4uJ-?@B%h|al3yzM z49)j|{f|kmcApi~^N*6NSzgOh^;P|-u%}1sQTh*(e3s^_olQ!9l;%qQ0?E}WAInnq z+$;I99{JZKKVI__VgJGNggqx{uJX^7lAok`3i2D!0A#!s*Id~%EO|onV<7*m;Shx~bxr!-gk|4dvx3sL#C$-+9Tp%mcXyAt2pI%nKs{Jk;0`y}tE+ra2| zZP4wn-MHY}?Zk zh2%ggHzAQvbqZSx&GC40!2;X1ojHkoIvLLwD1LK0lRX97P7Wk;@j@<4j_Q%=-kX&ad;ow0JT*Oc`!8S?KJh3^=bh z-qRfKDL762+1&g@t}mXZ;+!aCDXS*tu9L-PXj2hfO9jCd>lfRZnVOri^EjxZ*WN)>4`FL?{op#yk6{kxCa9cGBOmoe5H;Esp$PFb5)KTw^4^h|0x3k;j_$%tjm(f(L-gG2%l@O>fJ;n;>SEjG}F4;t< zvnM1v22+#NzYE0=kX@^hTy`X2z(7MJPU?W zpU4o@`~9D3GsFGq;Xct}j+AEXbq>7{9!aEgokHypwbgc0yeE}OB?~rgN+)jT(z$jzOX_m5G_6UDO=fO5|AdF_bst44fw}vZ|pmP+7k_5pL`zE?5v-kW5LBKs%}`|Bi<3 zh}wzfZieR_mBKbAHqL?*T*IyB=VE9*|{0nZxFR0 zC3=5)L2w=DMCZn-p!Fy6g?OJBRKyDuTs%3D&h+_*(jpA#CP_O)HO<7)T#n|jI?}n4 zCQR35I-eFFYUMd&}keK6ns$5tR4lA~xkQ&a5SzoR!F!b@nN~ed@%n$a`vQCCpdPKtZq(&$oQR0-O zOPR2pmWkBd7g8!o)2aMSia{<<9iEI>7NS~Ij=+MguvC8rp3GBUnHB+CW~QhwKurOS!$j*% zm3z6gv3mxxqnSP_D&i(4dOXo9hR#z%oGK+#H{KM{k966sGWp&8gEBpX$Y6UWpPe~6 zj0EMLlbk5>?cq@XgA=GF8k{kVpeoyZdmr?`E?-92CSlPLFDKGEsOLm`3JWuG z*392?)VD9n(s+&rnS%k6t%D*alc;kPAYj{r?D#UKIgvr~licDW5>w6GmU+Ss4|dUt zwaiTA#Oy(y{w*idL_SHU`pb!g2W9WOH$7A~)gU&jcT!6^ZIQv5iQ&HNP){n=S5D3z zoS7P-#3(1@4E79+_V<_dCgmjR7$*m*2bD~9&@90~IgPC(EG9>|C*PYbFWWni%g(PL zJD1c?vc9HD%D;ZnrO}BLT_=i}T)E^43pI06?6~R9pWQ0*L~#bKJ(o)?EI&!0>QXyu zPShAxu&1)2@{IYH?C3D}hv^@&w5XhHId`jcmzVS?E+#^`F`*qb#)Q=j+R7@9%orBQ zI5Ck=QO?O>mzYdixt?66nl3xebedRkClz+N@?4_5IEXD%MVHmy%F1JMZNs&bq}Buu z71Kd$UH4S5TZ~lDx+_bAsI0G4KSr>b^g7aS~PiLQLF-^CH*m8^3h!)4DUSaCS~GTwg$1ITrx{i%s=Ag%%w&5PPbZXCk^g3~0* zJvv%x<9aG~a)(oO4Lv_U0| zU;6M zOP)GaW$&<<1i~a$^OwoE=2K)|@KdELR&vXG;53C#;c}YV=j3Tqd$Lek$f7;8*48y# zV^Jx)&h9PWpQ8z$yi%H0l&j0Rz%{|(pRTH~tmRkQKj1M$XOK{{>g5lOP(4L^C;Mnz zM*pE>6;*c^Y_S?|%q)2`PH{YAu5r_mjWVW2sR&aAYGYlPM%72B`w9coRS4-a9hs2B z(Tt5`lLKO?+c`WfoynwWPg`d`+Y)WEl@>an5;S4nRYuFqNfSe%P-`sXU*IcwGB{u( z=0~I!%#w3I%H}c^vKSkOt>_ZlpFg*xT2HA!ywuO zj-GGH9)WVb!Qd9vks7*rj{vP0wdZvdX-{WKkhOJI%0&9}b#eKgVsPhVO!Aiwyq4%Y zA$B=sagqE**HrEGz!bJyT|v~CsRGqIJUdmArzkG%1*)^>j22S5v%+JJ(mYlsxzISd zE9{;WZNuo(3d>d44o1Fi1s$V2K@(J2ukEQ|gY76aNun1@?UcK^?VdWnO!L&`gt>nz z9+!Kqd$Vfa2t7F@&JO9-68{#a8V#NZDBU!?rr^r{?ETf)R2b>Z_l$~89i@TjvvyLQ zFSby}ZL_(L&7oyx`rl02I8KX4rSTdoot~(yU9sHn?Pn~-qbJJ7wpM9uWjd=iww8fp zkSj#&+BtR|RmJXeGhz&rV?M3Px(?9J7YAs`EA;WtnV&;)tfLX0P@5DmJX7 z5;@xO(}%9Eh=LQR|Mm6t1wTw9m>?%RJUn`q;$wo>=9N`iDpr zPsv(%al7CD#$!};?nQ385lyvmX6=8!xyq@PCb1Lx-+M^5W=H(r6Dj4c;x<*0>%`Fn z%n(;UnMm8PxPB80Ni;H)tJB80WpVAo^qvXS5Q^Y%E?L}E;2m)kSB-e4jw+7sN%Q8# zN{VyQcpaR3W-HpApc4aqu`&a-P^2T(pP-WilQY>l3GOEA(*!&*O?ye3_+P^4>Swx3 z$3C>@yH9RPg|%^Vp*G4}$mKY)f=T_5)03nv+v59I|NbD}BK|m@u zFV)8*gJN%;nvhr~C2rHGaok(lnd=ILXtlpIAQ2(409y>uHBs8-wCD$fs9aeR7qNhts^ zF;&K-D3#+u%3S)%@X>UCOu68Tft2PNubD-;D0hW;{f|bee5XyVn}lOD9!z(4(-sp? zw8UW@x@b?1k>l7ImlzOkI$? zN#ZV_c8f0KG!L@&(%t1aV(Yo~)I_lde_A3W^ZVyrz`LR2JT>2}>+ z7aXcXnOZj8I(q0(d@h;CU08g|hpw8!-J|&dxurqwALF)Jr&X(j@(`#eYPQYIvlM9+ zYFGm$WxAFTu_u6H^&INXj+EHw&4Dgk{1=0Ywac_bZjcr|<_?R~UF>@u_PTEYri)Bs zwv(c1AKH!=pFCjlDmX-IvI7p zSf9U58~_fLkgA5{x$-1lh(`?I3WW`VZ^1?x4O z+uEI_0kJq;NB1*`Np3ncPF<=I8t(DM9mV3=ofM^$uJ(%AVYP6+I>7al$x2P&RCh+#>jYd zI4(g4kh4iq>r6_gGJTyxu~;unQrFVLisctw0TmO}$9Q-4|NN~elk>#EMB0W<=`c}j z!!Db6k?C1iE~qrsD=9WMr9$xUCSMdzU^F zNMf-eEJ7(xDi!a+s4ZXjOe{u3Z>=e*-g)CcSMPKSq+EYh>wP|bV^yaZWwEpokTVe z6EifI=;J+YpffWTmbEtJgnc3gcNqDD;?!HR*QI#$$O?9bBZ3RqLeYWG$h&|PrUfaFBgRsHnXNa$o5E;w zz1)RYx{XQg#;PHT?Qz;);fbYod$1iLTiYSL&STN6yw7;7_i)+GuAq4A*^{MaQkEUr zdi&3ZRS*wc#DX1e=tE*lW3j0!(H?^(f8L=`J^NA!R zMqV5?VUtS+kJMQ#Nf$Aa6fMa#mO{KV;dU=*k zX|JUmmr>5eLMX4TB$rXWjwe&gXf7HpD(EpO%kEx4aQQ7eo1&7C@2H@GL_5DIqwL_w z4yF3ibR87cNMb?Qu_q=n$w8C`)Qb5tccgqj-lX0X^owN(WRW0aB7^| zDqkpmlfsZA2c^zn|75Ly`5{F6)c?(5p&_aJ=H(bS)73_ziV*pr`6Zx zH5KMn?Y%w!kHn*5e^fGKTIO{G72n-odrJSGvG9PdiA@&$#}@x_#D7BKKVk8oi1<%b z{HI0yr&avNmVevwcUxjxirLNbSNX6l_1LUeDz@dbQpAxWj#S{tM;)os;a{boBNd0F zf{;`Yl23)?Qz7|ONJ@q!2}=@|8p86~u+$lmzeXg9NcpJL7L^7@rOv37X_n76OUY)I zlscnQPgMRImA^*iug%i7W~r@NYHOC-npvBCwpl*gB4t{nOpAP~MM}0v$rdTu!je*d zi`3sLC0pgQt@7DcDbp$~X_XpUrG{3ip;bO*H^~R=Cduq3DPT8AX}d`(u$!a?yGaIS zH}P}u6{oe$iEVRg+aZ1+#1C-d+aXpKmS);v4uPFvvo~yZfz4jA*)4XM!;A295jHm> zBWSa?>(fd2~3o4hkAd8VVUo910uz+i|2*94>DTyWL?A zJM4Xjz3*_LbJ*=pSSG6zW~(_9IGhO_cAvv#&tWe*>_vy&=dh<7xQHF*aKUo8WI60w zhh6J%5p&pM4!g?XGUc$x9QK&QMa*HxIqW!x-Qlov9QL2Xj&sNQksobn+~c{-ph zD%KDuYlzEMh|5-p%?)wc3b8vv?2Zt-BgAnCae)hQ#6oO*h+`CDSB2PBA+8}qT+%}9 zu@L((IUJ0>RLhQy6yD`LW46*-0?9C7tt`HZz5IZNt&Iz$|LhQH@7p@SyD#Sht zadj8sauniM+8Ni*TumaEXg>iHmTFi?CB8?9>R?iV=2PguNMI zZ${YR5q5Zl%U^_>vk1E}0yna!qwMJ@m(3{mMxtCOqg?)?+_*)#8xrNB=CHCTXB&qz zgTt92%!wT3_AkmsG|Cljl-(cY91`Um66G8c-}M>!Wn zIln|XYed=oQO*oe&Kgn9JyFg}QO;RW&Kgm!ccWZUM>*R>Iln{^70xeF&M#5UC{fNR zQO+SzbWu4ML^+2^Md_heX-$QO*-l&J$5o0!VAl6H(3+&0NBp+5OF2?>4jho7w%%?EYqUe=}Fc&72ER zsAR>=<;6xE(FNk#5}giN?>qdA!v)IW%;<1t3~^=*u~8wmCd5I7IN%UxxDe|Pao;M0 zK?qm>AyoftcbM%Ca|IRV3M$OmFUn91 zGi+8+#~Y*l`kS!T$2@6umoGY?qSjqxt}rIx-cgzzKJVZH;nqgcsGsEUvil zD)158=8(j8kW6RkY#|-hDDE5=6O!UBUol4=U!xW6(bN%i$xJGTUGNo#A=YO?wtvhz z#VM11+H_3;Mfo1RWU7jg0(a;K+txCJ-Up}V=V+fA84xJ!l(~m7_#v8C4}57v;8SkD zRG4PAU6NL&YTKr(S<|`fus9EA{#ac2EOVD%;6rX>*Pe-d?JRw)h6OgPD+bzFW_>OA znZOm*z(?G#!>(n{J!b0Ghmposn^+sD__fxiO*+50`1v}iwN3Q6_E*aWq z%bN!REq6kEo{4JQAv&g*OT`wX>6wV;?o-eKB3d6o2qp_i?YFwul8&c}1$~3wZ6t3Tp8OcMkBbV1_4)etc*RQ!Jq{PA2Ld$Kw1eI+3~}J;Q<32qRENAZchosm8o6hFx z_#JJ5&7|k#61jzR_9R`9C6yYlNU|W#{3K&7ecAYYx^ikbmb5x#HBr*1l|7=;i13a) zn+56hr~Pqv*_XdZ=;b1#w0FMr!Q!SOI!7=%OcJw3ME2#qBLSjxlfx+8ewWB~&~cRj zX;;roggna#*(E^R*I1j|I=fkDkIkdbo$B3I{G^_QdsCU16x*T|LNRZVyMIry}`30Jr!O}UmB$#lN^dyNpCnW)4X=W93O2y zH^x_DS(QEuilDvL_XAX9j1Bh}^Gsr9d`ARjt-0NCPHLlIAYzCXI zVk)h!t9&}>ed`s^e+LF%=>)p8fL?AOPLn4G2I60J;EQtvAqq`BJ@S3>n zAPvtSqL#n+D4)r7S1nUZs>vy{wZ&_lsxQA7tvxPl57Om)*UaC#dB>%Z&3g^>PHhhL_j#d>`n3A!9GFp!G7yFo!#)>jXDx@^r7_)yt8BIqgKYBEr` zmZDLvWCl9GT?ec^9+fTt2pI@0O_n0g))ZYr_Xv&IS0u`qhn`Pz2GNl>4 zn3v005LBy|3!l?7K0>d?DD;crlhtwb0l8HF0dy7Ef(3E9V}j1T(tQ_&h4Fb!7QI1^ z?6c?v$aK4;uYo1&4z$CG-lk0NC#-d*%tu#kbNxE`d^A=!xn5Qi2I&>9(3DkG^+bwa z%+#cT-gCw`Et$7H1=QNbB`D>{b)P@+v2vYeJpJ^o<1~zq%F5O%%KEdGsVpB$s#^Cb zYmmwt)lDe*n6xfasy^yeWuaeL?K9Vvw$l0Ja3LpVd8q1)#^YIfw-3ET9k&^FCW*S< ztwL}6nJFq+T7FI^m2_usyqE4lq@{7X*)SAmZJ9jno2=yFWG_7$5ic$9uLoTd9i+0E z!{(O|#pk6{^L@>X*{yPhgs$9-EubrF)5Dmc8QU>+M{hFIS4d{^x!!n)ri1!N;xU_N zbc!MOk2J-TnGyQYj(3SoKyeu7-i}HaIf}%mYuf1}w;IrYC}nz%h+9Lcq2$nre+qdk z7;&E($@;aSK3S#WdaJ`6I20G1Y`N$YFJ$A?{;qA^s5Nj^s`|I*w$goJNlLatDmHV- z)u}BOTUQpUZn7yL6OHYB)90CqTEy$Oy6Hx=it|oTr_DWQT5j&iQ|@WY5Y-%XQ)+F= z>6$eCd=rauhe)nT0m)_Lq%lo|YG#f<&qScRa9X+2DH$P_6sFP{w6zZp+~d#6CN-+n zifXC!vD){1q3$HtsvU2&cv)-*6gN7lD$}zjUhOc;osL0ewA_B~;5MPmQ~qs3nFj(R z9DH9^nbs=!p#Z~z_ofF8>c*g2D-(e+(C#18F;Hx}N^cCWCBw&5xluWN9kqR)?lMZx zI$COI(=}yq-VL04DOawHV6@Ry^=B&1sa0up<(C{+PzRb3V_bn2Lnjh1TC%dn&vyHL+S zg5D9+omiNmSAdwC6l$vfW3gu1!BEI$=|V{Prio@(7-FA7jOIOanUr`zK~JID2?9Ai z(37Rt7>j9(1%2tc>4N{5W=uNij@phtgoUP9zDl zX#%a%^e&eufy3{Lo0{70!j4svlWSBR*aX$8FQ_@HRbOD!*Wb?QX{% zi0U15>2zt8QPOnO=J3Do?URW-@VM13g#+S|&ik*et zJ?V6|DXbJ_M+@<6e>|5Mo|}sI4;4t;sUl@+n;=Y#jHGBDn3TvFLOLczujNTDSYX?> zQ#zgOHpjA*oAdpylZW zR}En|mo|v>+KFsV6@$`35Q>zFB{F%QV|L9U=Us}OmeMEY(CqMFJUcA+vx?KNrOMr+ zN%4Zqcxpj1Mc3id8-=83^=TpIr0F#!>AAyV8lO_OWFpNSU>{9f53mdKg@u`vU;J%X zZ0Ln%v=r!NG)#L|8Y4P6($SooFVHa}ZWs7~39|v68+}VgL-+(Oc z-rQrfd+r|t8!@N!O+)l%NwI__3$)+6j%ebuG-Y&7v)x+kvCtAc#&-o~b|17&EwpCW zo|`)_udqQx#zX@Jn3CZZk0 zU)1KPUyFOKbkLrc)Y=g;hA)%n*WVUxqRgHg$oZ#gL|p|g?(n8cOYBf1i&A<08h{#F zP0?0X7+f=lgFxl6wc0vSwCo^)tiHZ&rbO3Y}_v)XI7W)VOaTY7PB4YeHMY*=> z-Rnj#ZgIbDG0siiT3)N@`$8-#V)Af+EqhJHLMGofA6#x~OLyNm`@g7*x(fe??W$;d zpGZD_+odWSViYeb(2@>`E{GMWbk)AqJt`8--x_Zws&xBfl`*XF2v9&ID}1_4JarFN zr=0N;1gGREX?~R6)aAQ}An56koKoTE%4|Uhdfd*BCX;kUO#i6&Fsrt_IDT;|k`D;X z4(zz=kb<6U_8&GChX(-ji+<%&_w=6?37U&D2Ya#He`u`ow0dHy(E&V5z*l( zZF5^n2gLLw?MMn97E_Uz&#N@mdJS$zxC2T36W;Sg0n^aPxQfXmWLF>*&d*Pb(5^H? zS5ybs!-d;zs9pRW2N>PI>&&52w)tqfOT|px`66}aC-X+?nh#T!O3*1idPDGVK3z!9 z^XSoDBC)mT3ORdo?BqG2q~#Z;B`WT`57xIzQP*nDVIyhyesW=FNN_?n zo6)%qxoH~TIHsN!X&Ltv0$DyIaWP&hWJhT>NA~c0vLPBJ)2%%vvj)m8zha|*tE9Bp zp>{bJ2K%Iw<4Qw7Mb*rY%%VPa>0?E|RhaZXf$2)z^=igubhnHBURv{^)bN)UqbAWg zrwb1FO^&W9)KbMx)5Hv26C{Q8UT)O8D#Mn_N2EAc48CDUg|}%UKxPhKiDvP(VVb5h zM05r+xc`g}BRfKeze`Vk8&NAwK)Xd86weO#mmCx?Cyu6Gyb#y7 z|L4-(Dm#56@Or7d@}(SqQIT<#U4};cB%wK%z|dFHm{&LFLQGAb-=S1znPTVCwvnCX ztKD2#xkN}zThJYS;%XO>o6E}DG8c2R>rRRih2dGln359uj51Not>K=5>}aNss)C7P zx;8e)noIW&4$l(@T4;8U<~`>1mmGoNX_C34i5yL$Bu^Pl=Ta6;V5Ww%BuT3T!&zD} zp!pN(7SNh*qEJ|fnG=2_N7t573szbYYE#PJ{<4nOh?G0eRm0sJ<!1^znG)f54$l)WET;E*PNdxvi6qU#b3#_%68dN9 zU<-<`iJjO%b!ks3Dawp^^Csr$da{xEIr6ONQe;GjpZ-@Gh%K)ub6td&H)}>;8Ke61 zlkwDcK4F;?uzq@~@|&N67M^yeD>ID-*~cKdBTn23NE5B|sdl2VQ*2mXl;y4={X(JZ zRH?5N4so2s_Hn`{*cCHgluIE19d&vTL86QKHq($EfEjnt@Tm70$UR zaeJ+^ELu|bt}04yJ3^NUQCChZsnNfNMvQW)vx)7bGKrDASj`rzZvo{f+MURgOyJMl z$OZjuJLp)+7SI?_6fIHRuZfhW0)<*=QD`8WxK5(K+Jyd|J?@T8s7#n6+IoY`b)^($xvpGEOsfwi83tiOZ!= zRl5mtw5~<%$3i1cYHip(W(hf}IuxA%StaH>`#XnwM(0r9TuiG5s0lS4Em|y^3ZT}s zuZM=@qhiS_)!9Ft7FVU8`)NcsZ1vOZS5Pmoi94k7I@x?-#<0{COS`wx=r-PMxf98! zXqQPIS6=Z_EA?k7EqKD7`evS6PdfGGOr_0hPzbiacDFD5)75TG@+P4&xh&wx$~yDW z&U|lfG(~-QzwVIT)Sj82SjZv)_BM&$AKfb6pI#vP9o_WW*-~9}E^%n2Bds?p1ZbgG zTIhGYP8>*QP{393u*2fI@>HLkqRP@7oWsR3@ORrNwx)t)##Ats=3i5N6BhQ+j*Udd z8-VethlXk)xlBS&odP54;+4%(RzEa_px>j3R432s^RGI>m)Hs?W&wQlcs=(5O@lM{{byd@avsQZsUtN2x=dr3!BW)qA48qSi`oE-v%19q~R^ z-dsD7K+bFr<4mL+?j8mlh0;G3n>vru1U*1V0Y%LQ19@|u_wtF){yd{!M?O> z*r5Ha)4X+hHb*ZCr^bSfQN_?JN#&@vDP-S_rVXGahtET;Es7gfekcVga?}ze=l888 z3)-zbHq?neof^}%yD7|1iRP~OfF~)PaM7mNf>e?xe2Nd0%Low;A+~^e6nQyT;=s ztnH3?gf|2C_XK#VJ~$HaDo0F9-KPL(cR#AJQO?|<-f zOHDe3Q`VXvYtrn>jny3d5c_*t{Bxt%*)^FaYjER58an&brZG74)TS>u>(Huo<#&** zwFwNV%SQvtdKIBnl$olsznV-`E}?yn=~R`?sxo@59fZ-ks;SP`&SWGMVY?}eXguOwnx20){jh0gNTXrT^`TZXK_X*83O8>B^-gi4|v zw@6)z`t(8SY)9;VNGHt4{6cS$FAM3)&c#YhPa&M7)m5RI)`jF9gBX&OydTOA(M}lo zf++d^C@DY*Mwfu`X#%nFohH`##ZsQ3NioQvXv>9cF~I2&W5w>4c;}4xq|UCG)lX+9 z2Ce==D&v2_8()|E%YLz z&f$}3h%Y+la<@OZVcqX{X{P&KeBI|8qNsn@^+uV%5V5nxjAcNAG*Q+P`_T#^9-rl&GPw4x$F?VW=G7S$hAk;h6P;&-1DwBP1}e=OuT43 zoeG29LN1p}nwSk1>v8@`Yx9IJ&-0SGH0KyFff+8wQoKt~lspm^(eo+5c2w-*60zYI z?+niq@&THQQ7;wtSL{S^qJvCmr?YDl2U5vFO0lC7YnvBs>5&`eOq+~JR-ML9lU(Va zu#lF-I)`V>5&6A0OR*RjqGe(c>7K0E{FbI|h`B=NkhsY&+e-uDcz(Ea%Z5+l(EbIQ zdn08XX{hql2X-s157EmC^NEZU=7S29gevfgpXkU}|46#(N9G4Up(9Ji`z2iWRJxxJ zNmnkdx~F#JgHo#`jNl|K5t=U)(LPh!Ipd#uLo(4h!;qh98!-o2Ye%K_SvK~(>@W+7m`vhCy$p3=V@+RBV{7D3JMP81qFC z^SvRM+q=YygIG$h^(V_6!sV%a1vCZ<&PonmujmC0^95x$^*OrzWr5d?5DZDMNEu1-3RFghs zz3k2_l$zqstFhR0RpYCsDB}mdY<->Xo%KuQ%(|trtCb>M!BuV9o!2+dm3g~WwQ>Ics5=ulucrV1Pa7hlv> z@7MSHea>s%=Y8Jiea=1i+;h(@!Bp9f50+PD%~y{ijtTa=j^5k6BZGS+ni+Igv)ZV= zG~gZ&Bz4Xj;@u5+Pd~gnDD!+E&s?J;duHqplgzFUv!lXn_c!yC%SIMAp;<6*uFHci z?>pI@>>gE&W#pL2kvaTbW|iLGW)wB?U$ik_^Nk8%dTO@p zRhN%HCuMdp+X&46%UcW4)eVX^3p60;3K&6RTi}h4_y=qYEkCpe2p=u@6kfW)I$E zv8<*`8Zm;C(D%}^*}Yp}?o0eVwz0OAR+pIh@6Wa|`#*xt7~NJ)yf4?wVPh#qIK*VI zIXS^wB``1j6) zW^I0bgT1Q7TCuDz0`L15_rm^~)shnZm2KL|iP4oYYXUjLbL9va35|Q!9NRpY7PqNs zgltClXOt1z#&O!b{M>>vN@YK&FD(| zHizMrU^BcYIyM$0Hufj4W)&pZ1fQ6cVbU|7wJ%`B_^iG1=u{J z&$nC8z5Nkc0|%Owf!u-wvs`4HOUU+rpCId`vEL2K%9Dj8vmjXzy|<+F!p)0VW(Qzg z=}~i|M%}%`S2d5^1#56g-MaoH18Z| z6&9Iul`_0nfRuhmmC1x~M~<$8xqg=UYY$<+{RP?P#H?pejkT$Me!eyT@qCz>zRnLTGRoslzQytf3>5V0?fv)BirLzyRk4Wa+ukkQMfJk6e$kAH;>~x>xEqW~ zalZ>EQS4%w6ii&CV-(L1*W=@a>9O0ZK{-Vu3Ujjaa`UodY)H;nv&Vd>dEX>@G7)Dg zoM1|c#rk&OcZAQuui{cV_BKqh0t0!mB7z_#H};o_+7t{cG|#Hd%7Zzp&rHtc#X$4F zgPYZ$o12MZ^vY30OYh-oUWA3cTDOd{Q`XhWeSg9&-%K&tYUWIhy*2m!WYIes!?zgp z0hdhjGJWXDdC*>Q<9K5Dd>V6vd8@?4Oz)#;4Ku@!38LhCHL)?vRnB^B-e1goe&`*v zVghkDX-~Xul^j;P<``&Jcn6yA+sK`?8Ci<|!VW9$7qQXDMLs!aV4ivB#JqHom7krH zmTvx+x8P%Jo7LSY>w9CQm?y)Gee?XgxbML)v>`D#3@Fv_^d0hx%)`W@!CiuM@n1W` zp)`ARqD`^UCm3XuVv}OUMvkS)Nxqlqg$3DzdC*j=5gkSpq%~@o82tUv1hdAKHB{cc z%#6N84|#B2&X}I2^2sp|qHnZ=zp{>)zcPOm6snAasj|k`t-w^hM?p_>I({H8xrBy( zRb}%-@CVvwRf}EfoAew$G(A7t6dU}hb~_(6H16A~r@E-nBz;77R$-1gYhW*zd7`(j zl<#D;#6vSP89Wk#l92}PPomUkks6e&|ze}P1n9sJe#hJgMcv!};)n`bBH^MK}1 z)S}@dvy0M)ML#Vn(M9pW9xY^EX=ybg7N1PcqV{XV)T~HK_5)_pBHk@MX2mXd`s!C= zlQ`?8wZWZRxe(TopZ&HY359f0&|jC(1*QU zYjMw#&DAP+mTYdZ_jZt$iDUeqr}DtO0V8vxp62^ysmVj+gq_(eGzz=BZ?+saH;LjSLzg(cftloZr^L43+!#xL-GHHrlYVWqnU4 zn1-Q&B>n2Y;&6XMMm>M-8aW_dYrWeyKuKcJOsFyID(8dzLyt-=63@{_L zZ2mMdvoF;DKUOKxyb;@_z&!Vj6q+q^=I`V55mt@+p?3=vt4_GrUyLyIi2o{WVuV8_ zHIBYkAKEmb)M1}&>(y3s#{W=;iQK+bTeTlPU~(_2U3S}1H+-q#d!kqZN2tAPj=Om) zN!luLk1V%ptoaceV3HcPEf{HbymvACNX!PXf%bMlx>i!A`M-e!2PWj_j48^>H4l*D zI!#1PTA8Voa-$n7Ffp~A`J7mhygDos_)h5^a%Bux4!%su?BN}KiFK*Q-rsjJTR6S$ zpBw#jzIZVv%zIKynje=~IVKKp!c`}w&9K7ra)z2yB{O<-@8WyqMNZp;otVbIXwxbq zy-a@DY%%DnL4f0n^aKjLhl zgL0((B=H(%+Wi;i_@!>nx*6o{x3D?Lx&|^kTYO`ZwC2ciCU{_wf9c{9_pBgfCT`)@ z{Ym`8zTiMHSu2Tp>Y9|&)@%F+=-wg-baqP`mY&pX2~A^R}nR`IfEn2g>NuqoBiJ)4o0A(}a=D5PMB!u%?JK znpHNVS$kyE+%lHMQ}1<}xJB!|SXNGKY?hWxI}bHC=)p@>9nEtKS+`Cf)x~@gZ&3b7 z?;~@jk@CGmb280tH}8a^4&98*|2}+SSO4V#*I{D56x*FD9Z9xKYemcN%22d-w2B#X zgQAO#UuF6r%3g0gEmBE4JHlJ}!VzBdz`A}iCOlK}ZQGJJ^%C$90Qpy(G_ea47lzsO?a&dVgQStiq1WZIaAFj=7qeH`~l`-PSzHvd44m zC-aG=n(r3N`q=!$yQ0ZFQ%iUGT^Z8d%-B7n9G5`EE~VGF6w03pbN+~G^$1%zoY&>Daq{pZR^kU%>u36MrjUI z+iQc#&S2c`$1+)Tm+iPKy-fUMk`O$bcN-35b3wL=nYXzh>VlrQHxsiYb3md0fU;NC z(2+Ukd55Lh*|p3Aq6$hf6AkZ%DYm(&ls|~~%%!L{$xBML1?+)OCA}9Ae~Vyl-u*45 z@qsr}>G;6&t~qE9(>(E$uh=ib)5+i$-bn#LjOC9r2bynu4mNvvhvu07Az#`vO==E- zwEx4NCqKZvF2IbArAx9L<ia7{PPC(5WuD^6r;wvWJ zmjjd!B?SH7*Qg&zh?6xjOQZabMDR;jWqHfMo?gc@ON)KCD82#n5^@LnN35DJj+kd- znQ@2r`yr27xsIPk%lYV81I>J~gQQKNdDSq(JIqy{#+v3d9a33ei8qtlN?O!=f61LH znV9HNQ-C~{jBM`2MrL74&ccoLwUpjjd9oQ|wE2(1yfPJTZ$P8^a%hL3;zWF1^a*xI zr*4!>mIMD{H7d!yV%66?jJFu>jY0A!hDugFOzlz-Z!z5QV-|}k)v}8zwbEUN*zqQ+ z<(w!wB<}ZSEhKsbI4%q2cHv&bGSCx6O;G>Va8S>~_5?2k}HN1%9t-b&8@ ztU&dW{Xc1V@46oA-jbeC37i=252`S}(|YOdCJ~tDCYqy1^33PuhM5hD|Emdh?CKP| zz^9nIJQnQDC*xd^9B>Z1n}J{q2`zN}59Z~rbQdnSO7%aFRZvlLc2Mzy3%c#6hwQQW zLQ-Sz9GaYgZ3{-5V^>F*%~q|li_A9zWx`{QFKw8)2NP1cyGl2D7F^u~=9;{8bzvEcu)xjN?U&GQYv|Hqay<9BSR*U{kHkKSW4*WR&lC%IceA!-(P zX^X3YonM*VF=hs9Zn@3>!)P&CviI zWI@opWDUVpbXlnZwodyrY{kM|vk2WEK{92PJz?^~@u>m@noTow*5? z0p6^_1LvF7TyIYg+cDP8^40L+L(JAt|Gvq;x*MhW7J8GQmVpE2&djWQnm3wd*X{tN z6xp+!q0DYVWyM}<+~8g0MsZI4_X^VXKjur_8gP|lQ#t&PPl-9gMuFDV?FXTOD6;w~aR z&&@Gfv6Ju2x}vPB$%EL)G)!t@?%2Jv>AVF9^IebFB*{C(&GgE+!|BYqinNo|uwAEC z?K3h56`3{V%v|#bJJ-C05p0j5(j|W4pv=MMA-|_qoJ#YYYF|(=$p7A+xH6(^{?M`V zW{jK&HL9DL%xk9v`3KQO{B^qgRosrLm{&<97is1L`%t8}3)Z!X-Sr-sNM@US>1i~~ zdnyr2B4^n?-Ho&?Cv}zjm?SUWa`E(xTc8Sk;zu42C)?+~{@#b+@7=u4tS|TvAiQU& z-s*@f+k5{jGF_6)*fk`_EOx|}hyuA37wiu4W>CeS&U;U)8)uqg%ml0Cr}RMwOiDH@ zP3FM9jIsGegL8`Vvc)~`<3xLR=NaKy^j7h*jFw4B-Zavzzr-zv`Ct5ryZGegmwHW# zx&cZm;lPpTz8bpQZPLv=la=l&J=m-fbuh;~D7X5FY4S_gO})My-OmE3 z7gNMdCt}?^vdrl5q?kp0@Q9CrEYJC?nZ*`E?WdVshwYXvqjN(uI!E?d?>D9QS|jr} z2&qpPLyJu2V?!fGj2xEJyrwSu$fc@yP1Qvq8=tUQ~Yh)dAa)2 zdV3pP%0W#ja&(B5s#mIjJUL)jr zJEF~QLpc{w-oEOdk=Nb3VtTHn}U(v%X*T(+VXUG50^U6~qmJDL{eK@4d2`8(c|*a#oq$YmOBV9J4h~Rpp-)i}*>}9i; z+(CjhuCWd)ta%jFfJ)+P=*dJT=bon7o znrL{I8EU-E?xsCr>1S@0g9(q>fKBe`q1fi*DaO;sGPkZBk=Wbad zei_>f5w)Mnq)2!tnRl3?bc4LTyNNJku3gIXw!fL~mYFjqJIDJxq5VbC;Nb=4*4BG^ zFUNsVz?0!(4U}Z2faX5O-*2Cl;V(l5FCEDw$}Ej#7sxl}BgT}Zh8bpZKQu>9+ci69 z{Kf6z!LH(BLy#g5Jp}Zh&^I|RYea?_HrnNlkyEbPm@gb^UoB(mnQ_n>TZ zC`6>Y$qoI4u&oUnXJxjW?S*MvL8eJk!~~v`$!5JMzT3p6U&&>xZPbmq3>SV7TnrkS z7^K=57&puns~Pw>b;9BeInQU1U*|N7XI)EY4(MQ-(?sf%QjZC(9-vJ z`n@#nmb~;oD!vD!^uLKq(bDDW%|lX(8HKv!jBb}zlr_|j8vaNb+|u@n^@Lc=^*@Sp zs|@$6nuY3G091V$br<#Bslw zvL{TNu06uRxKdm*l#eV(%ZnL!VFerWcV;?ZtCt?=!ct>%sms9epf82}g>g z`8&*b+(&R$$zD{fRc0uYW38*ZkenEEAvRMow_)<%_u~mCiH+k*@t-DT6qp+UFG1Z) z4eSnO@IKLhy~@Nd=6n!8&iwY&s{geeV>Ou0#f--CT$>}{kK(rUm-UMgvAo>l+K-S| zGkiz!#KMd?ZdU7U(~>jf_Anqx$zoeVJi>e1&)iI!jg{uYYDT3J%aXlM(Pim}IGbbn zV#gkxpJP4=;h%T3SN$Q+bcpEZcO@KZv_Bm%TbA0F0Tg57y z+2X@jVo9eM%J?u$w!0V?(&$2|c9Ig?WDU(8In>O|x|)TxVOc}vctmf@SFDb9=Z3tj zXAUcphoiXHkBzS(2g_nuf3Bx*^N}aVG9mXC2i?Mq=0;*;f4`zh^4vVL5j8J2H*T=q zM;FZJLA^)6W&>tUky#Zqr>jVQnm2LnE;w^=XJ@l_FDrjUt{LXL$unzzGrru#Xn!Q{ z{0=TC7~<(8gWV+kGJAjSJ!VKU?^5nnO|)S>G48OC^b2e${?3y~kBT2kQl`I(E+;sY zqdqV%_Aj=Te!@YN3-HFG&9#<*v&K#|IMck z?8{-pl}m5(5E+iVt<2_~B)6kO`7&fV$&@l8FVeVKT@8IqNGURMUs2?^)DjI*e@T}@G>NFPr8kcY>V%( zcY}pD1r4WCVrJ&3VbQtd>bTFZF-a1-TJ0Be&bwHf#kauTjHiBxoTvNUwDUR^g#F>? zelX@dQz|XDIA#9ON?G%GPfa>6V^!W4zxKh1^F)c)o>r~YtlLwA&cj$W_tb>*X|GK< zFJf_WZ%b-v5>iCiNNnVGeEUaOX|@z)giZC`KFxH=f8a_eeeXs509iJ@vmc9W$odIbHlcEs6~N!u^Hz(3X>o#xhk)A7$QFk?Fa7xGUs}a*zdVBqgQG z-q6wvl_+yg$1Q-Nmhs%_OMieAs!$pKz?I;dv@zf9H`@u#G)kLG?ZF>Klw=n3%vZd# zvWIwYb@?TQsu3$d)kfGY)5$_wL1q8rsFKa6n!FP^y5$V__ufdpxW{?H4jr}dJ^A~H z^5Yjbv{E8eQMMZU?}(aJ%AnIEH8d}WdwXm7oj|piJu*->58}U2xCbRi{9)Nj+=DVa zX@u1hKhmt(Fa3|AN-E_|297krZi~|1e!v*$dZQaqO-jpIIN<@cRB4p=>XGznkV^iG zs5110MzxSq{v@K5h|@fxLLViIvR3Sr0?pOpr<8cgD4XG}->S(-VU)$FMF6j16hQ2VPUr503bjoc!*yzPZIxMhjfe_ejB zn`0kr?+3q2JNBy7HYnZwQi|vzH_P!~^-dW*ILmvf%-if*Xf}yvnlm=!GzByHFTT#7 zRMIRivB{8hvmL`6PAKPAnTL_Xhxh|{%uaF|*GET~4*{4JNHfaIvZz@r%^s4O>-}kZ zg8kWP|Ffd`&)MdmzyI@p`jzv4QQrK=+2)^s53*eJE1@3+eM9K40UvMv=FP)=yEiL# z?twlLb{3Xo!Z-)K`%SHda;Z=ND!h}Pdek=5ES%EG2HBZ~f6 z=$k^nP|?2yeKY7+Df-W#Zw~!NMgJr8EujBh(U-60;(QMD2U{+2W_)Tw-xB)c6nzuu z&xO8~qVEr06Zt<0c3Q#C?a(tHUIecNJ8QvfgYSm@*07&Y-H%T=->O({qzUXVM=1Ie z6@C%yv_ZL}75yaW*?(_R^p8W&e)O!O-vB-P>1IWraHPv0`g01ni~}jYETIWF`(rE1 z!}-=3diKYjiarZ^=5wB+9|=A4dAy>(0ebfL+ZFvx=-J=rDEeohXMbOy=$Apy{=QPt z{|L_hl~BXABm3z=mWSJ=KJ@I5snD}OUI@BnaR%(OKhA=l_Md{D{pdMG{~Gkn z+vSS>3+UUTpYBrh6>7S8(*7ZqhsTrCpl3gAsOT?&p8Yge(O(Tc{h0$U{dB19rwhQ@ zPhW?9UKdtE&wl!`qW>Ct_R}qjekb(or~fGW%C%hl*-wwKJe<$RLeGABilR@1p8d3m zqECmO{j{^9F9c^lod`SZr#C{+c6knZ_S09OXFvK1oc;9R+I~DGZtSNgS}xZ?_R~|L zr~Opu*^ink`gYJWZ@Vb^q0pzJpH5cvQ=zB*dlmi5(6gT|QS?7T&wl#5qCfm7m$&ri z9B}EU5Bsu&?%?dF7g-+8^IYiJPxBT1<5I_Q{xayN1``o$UT*p`j&UK76;9SSpYPrO}9mav5 zpg$G!|JikXe?;FN`o}Dn_B{>yw#WK<;irT51?Rd%0r(lv-)6a#dmhTY2YTB79h~tw z@;K)Y<8wPW?aT$IpBpU~e>%XQ@1U;_|Nm9=6^?iQP=BoDV!tEopA3FJczxJm{2PL^ z-P^+s{qF=l{mF%%{tN@BKSi)Ze}0C(6Z}8@BtH%Y#pP8)%foqfA2`<)e^U6)x-QNQ z&@L5DcAV{d960s$!Kv>EPJM51>c@gpe;qjWbHJ&87M%Lez^VTZoccPaM91NDgM$wN~^#6i0KGjZhekQ{IZ^4;w zzbZW8bZ3WgI|iI~PF8p#IPGMB(@tN7=YiAC4dAqMhr(xp)6T2lw6k2{AA!@(Kj5@; zz!@%{{g_ zC&kV`&^Lp=LIW4)=HLfe9`^qz=vzR4Joq`_Co6W6pl=C%8u+>3>ENxvyMrGMehGMM z@JqqlfR6@m3qA=v9sF*~!||C5eLLu%f}Z{KMTNhr@V6AcO5xvwv%l%AMuMKkR=s%Vj)dzpD+-es`>5r#|#?{SG{?-+{;VJMg%E2Oih&z~lNI zcwD~&XTQ7N@^F0agP#5FW$2mzOTgJ5S15cVIPGi&r=4FF-s^1FzAu|f1oPgj!8uRc z0?zy20~$Izy#K8M&Ut17%O!ufK9C4K*9XRev%ZUAr-HF1Ynt-2Cd6fJOMd=?9oDyA zqW^o5(au>R9@v>?xwJdu@H9B%aD0+)U-Vrt4xbFp`1H11{9*qpfIb6uJ^-gb+ra71 zG0Dy!mU|I6?Qa5SKFmyUc6z~|rQp2Z*<`uYtE>4Z$hYl^eiwLe*gr7UmCO64lfaoL zX_ia596!^cXMGofvmdQf_)hR1@Uvzk=O_J1RCpJKPX?#`xt2@4#+(1|VfVW{1wHSl z-UeqoZUCqLSJ>xs_Fam;W@Ep;;t%g1kFi|xpZAZcioU6$Zwb!49Su8u5dW9J`x#!v zcQ4^n@c!Uq(|m#WnFBjpz|R8j)5PiPfv*F<*%%A*{PdC{7Ud|!LJ5C?;K}``mNyX7j;@XJ;%NFmP`Ek{Gu!L91ouXp9Fu_fpgrb zajq+u_i>4qhx=V4=-Ka@fwLXYRruB56XECm;Iy;Aa`A`b#%}0G!cLV|MreLS-_86J z^q1O}n-q`RZ`J^u&vDXV=K|O{7kWNt=>bkVxvD1_j&nmrpQh-~Q}o>w{YBu+pPAsylc!*x>$D4@ zXB^%IXWZ6-Q@;hAar+OP{-m_=;~9=yXYlKg=fl7!gHHlyxsQW$99V04c~d;w@hj+A zuU+7@e?VL3KjYsYocg)o9QWP_=lJ%s<>F^g^H0#P|4{TNraOOVrvW(Udnw?Yr*#8o z+~$F^zHeGCesbROHuM}nzf$zyD*C?_eYtk7zO+Bta`A`HL#IH`=U*EX{kMw#toE*4 z#^*eR=PG=a!oOGe!RJMn+fL!x3O}QRZzmj|M9V9hUo$?P!EdYN^6*L6;d8@!=R5o4 z4_GetY3DIT|5RsZhwb=+n> zDCocSy1RPy2A`YZIM>;hSuXYB{OvvHx&C%`4`+w#Z>iv^Xvg!x8-YJzxs=QK(u>e@ z{p}4!|2FhoXL}!<>t>&T^L}%qVt)(tT$lSr(f`r86<=I45F=HXUw z=HYMP%)@`dnTHj6MaTaz%O(EI!|ICuB%+DLanV)xqGp`;3XMR2n&iq^q&OBTJ&OBUcc{mT(L(e?i2tDU5 zm3q58;dS{?aO&%UQ{PJA7c2Y*%OwxlFJ1&^zgP;+ez6jq{o+$__KPnp565jY^z0Yg z6#ZY&vtJ}!=*Ls)#ePxA@^HCFLeGA2G&uXk@rs=k=-Drtg0o+=RP1zvp8cX1IQvC5 zIQvB*IQzvoaQ2Jq!PzgSfwN!C24}x`#PV>QUxc3hViEMr^9|t4^M4gyyH9jKIsu&a zn}XARdxal*k+Xj*u6LJ!)6N)$&rtX$3g4md`!9BRexXVBV4gM?ybt&b;1_|{@9XTa zzc&ZJ82YxBOZ#4lICO=+FZBHs{b1<(L0_oouYmp%=qD-qMbKwLzXbX@@c(`2`$PXJ z^uwXw2z?gxTNV9I=m$XmkD@=QpKF(F=nuDC;!l5$fqo$LbrpRQ^f}NsRrDR8&xQU1 zMc*I#LC_CY^rN944EHsV@OX}}(y>(jJ zuWPyZL;L2df8LKV?LAiw;?@lM$KX##=xM(z^mC!_4gNTI4)_z`qre{qzsmB!&j#{e z%+EE@KMDO5aIPcGft~T@@9&d3lZm+z(xOsr%p)N0{a;#H>bZZ5VO3#EVW$R zz6|z{$TGnEi2eujPmm``;CwDT*mAK$KW~7Z^=&#pto!T9>=);Sc+fApgEP;(P#j}Q;qz5GDme<_#aVP$Z( zdkxFO?OqRh#;pPLY?ox{+3qc&XS6a{yYKB`Yr_@1%KXA?0*0~?bpwB@f;01eZa?nUt)PU zo^=K}J7b}*4}Lj#68IJ1IpAEc9%{Lids-#e?$3a8U&IlEoj;vmKO@iaap3n`F7~;u z{s{E6({PBh!+dCJc{o0;pl3dGR`mU#XSw$dbLBEV4_Y3M&*k~PUifo}+YR8nj=u!X zb@BrXT)E>BwUno&Rj# zr@+}R2}MrN{2ySs_``h5gP#3y%*bdvcUT^_GaY)`Su!fx&Pk(v9=3D3<>CBK8xw7( zyX9d!eW0g5zkuhUeJ>d6>~s8i2D~2hM_ump+?SOH&V5-6z;8jjSH8m8;l8Xs;M|vW z&p4-N`@XF3RhEb2^D*>{&(Cu6V16Y2w13i-9!?0`IoBZ#s!~Fk!t>vQU zI?0{TPcVf9{o+38zeN03KtB=s&%t?p{0eqfBmP^#zlQw*SNr~opX}FpmP;JCpKS{` z*T;SV=lWQS3C4i=5j$LG+iAI!%kk&niK6z~r6K(6VY%3uWc~@_mZj(~gT4#&V-@{v z&|d@nH0Za$pLe0Z7W&oDv)$`W@~Y*cJ>c|ov*+d z|J3W9zC84u!FheW37qXU>;`9t{>%ga6LDJwPJhbX=hMP+J$&v=XKa&99DsIpT=fz#^-17oyMu4Ugd9bezIMfgR|VW;Cvp` z7o6p;0`G!+TLaGcH=5%6Bk}2K{`tqgZ+@BO5>Mvm-QcIg{!ifar@^hRzI^^N8l3gL z3Y_&_2u}N#-RAt~zPM4Ai~qduxB{GUxbSx8C;jOUPJaf0(@wcNoE?r=b-@q8ICB>G zLEw$RS?)RDRiN(#PW@%z99ORd{~PT%8JzWMG}YCM{^x=7e(hFp=E;i+-=Odx!MU%p z+MUiHw%6I<%#+68j8992Uu?Pb3+7dS=$ThJ;EdZi#m)riY3CkAKU2}KgZ_Baj#d1y zBy0q)iahxl{BXkq{SDJxJUM>Wy~}aNvzfwAx!dU(har|rJn3f2k}4f0cW57F9N5ZYZP90wr@xLq5Y37mv*H8$3E!v^#4?F`riwj_Mfmk zoIjZl`S!#4Gfv@aEH5AO|JsM09s2*a<)WwmYr*N~HgMK!@*HQM@jvkq#~J@73Qv91 z*NZ=V54Wl16%FV8PA_oQ>t5KYg1mYdye{(UWAKxaSM48j{FIwz%SBKBbHVBVUEs984fg5(tS4N#^mDPot3T=M!~QR`T-t^HSDxqe^uIPZ z{j3kpdM&qH?9>0Or+oXu>Hk=Tk9^ws!@RoO@^D_=1>XKeb%iB?LvG&!FMUTL(luWOmOC5u3~2z z^vvhA3P0&N-_Ni=X_iag(w}s2`qM?RGX(rPQ%KN`g|Nf<>U8KCpAVpCxj!lVZ-rNQ zKEA#W*!8+h%cZ`p(O&m}k3>Gtg`LT$*9*||`O9126Jcj9IQ3tF^ZsJH<HaP2hDeSPl3ZQ3ujRog*=XY?f!&iODkEg_q?R$ddCIkt$APxf0##5zuoUI0ky&U)-VS?^g8pfivHZ zdd|li`+2e5ROxg6s8F&~v=H4tmMYAU;zR{WR!rh5ea|{!#E+@bf9y zxeaz+gr0uB0=@VdwEHqe{~q+W!~RE#{!8#1;Ai$( zPtS4nbjyt^2^?3?f}Z1Q8aT(F7U0aEj^NCPUY1L_cOVV}pl6)(pl3c5Df%m*p9=ev z6#b3RvmNhH^wXig6ZU5-`X?3s9PCVkomUn83UKD_`>=Bt?0gD6aJJ@HQUj#k#JPUf}c`o$K^D*Ge+iPHl za)T5KJ2C7qCeT{CxExE#ZK^j%BK`NuR!0nlJnI`kXCMZew7=eJrO z_Ww`lTf$DlTjr0=kF>AYdC%H88oV9!CxVOqNvrQ`xs=QM+#A7pzw;6}$CJOnX{Xk5 zW7zzNeU6`}SuXxhH~$3VXDaj@$J#5rH#o=1Dd6<~O>p}25jd}po4`4*_}Oyte+K;j z8~T-|(m}l{t}sILBXQvM=qSs@4zEYYLC@<^eQ?G<4|cfkXa@Mb@N*XIu)Usz{yuTa z{(J~MuV24`b6-ToxBWkq`f{H`18}xW8-?eBv%cdk7Z#DMdle;sh@PX%Xw_OM+1oQ?Qg3O((71kUGQU&0Qb zf7Mv!{N(em4wg%~52D=Z3g4peChz<9!*<45F7fGsesMkY524)Kpl5yW0cX1`ft`n8 zXFK#PcL($=H(|Al56eB*a;X>X4~3rg$3Rc}S3^(xOQ5Iy?a#GlebA5F+IQzv_Yn=U&m={e4=k@&w zaK?EBIIkCL!Ec29U%^L%*Zj!&Lpya9-VvPjdIfwS;<>?cX_q<3=grXbdVSW%&L8%R zKH$_p4o?4sXM7fb*F*fb!am;v{T=)f#I5{V z=l`SN)xjSFKi+bw7w3V^!5O!k*ZKBE&-aP$wp`*yKVJYJiE>|q9hSQa`kv5#rsx}f z=KCY%&V{})_~YOgf`aB8@t>vWAAz3t1y4ZF`-0`*%&Tv}8P5~HaPgG; z;$VC}3;Ze6E6wt7d|E=!b&nq4Ps7f|;Pb)r!6nYYy5h(XuTs_bd!psyPddiE+n|^G z^q^k%gFl0Ew}C$k{ww%%;7!*1=lFRO?8L<%oc3qKj;w2NIMdkjaQ|%sJ+Ciwp=Ud8fS&a|XQT6n`F|cb^S=i;$LA|87e5)d z8PG2%@9w*2LC?4?24~!s!VcrM0(y?CTfk{&2RP$%+BYr^9A~Zo=QuMFoa4;fmWRig z_0TiUTfrIUgEl#T7M6E$JJfQq&$!h9=Q`D~3a@LqF`dACXahalu`Be8;LpX-)1Pc` z`g1AlFwe(8PdisZzZm5%fIbJ~%oorzo;$%`ft_;S`f;upif3hT`ricnER;LYa)~F$ zxAEZgX9_sypEE2E`|}_;{dpYxnMy8Cj@|6)#c?kOJO|_3F!1@XGZ&oa04%gz>dSpW zYr)x1|9~C(bJTayex3z>C;Vw{xs=O!Y)5d;doKWg741G4oOw9h@^Jjef^*#X7M%5} z@x5O!@ss28+2Fi>HL*NgZhPq2PcHzc|NRs@MbNWd9)zC#{VC{qy;}%9`{^6t%+I&M z8Mi-RpX2TMTU^{Y-gXD)cst#4i5us2^PuN=yAYiHaVKZ9YP{uF}KpSj?1<00&GJp2fp{q8r|;rLd5 zyI)_a7st25!8yLw0_XTvADr!;YI%5^X%5bQTJr}Nf4*1S5}fNx*_Mm{UClqibF?9f zeiV3bjPp~#`5bCCcwD3g4md6Mk}Wj(a~E{7}TFGdSn%ISPN&a%mT? zPd*7f*C*dn^zSPA)!^(GTNOJ$LCBqdu04{Uzp~V0_3^^y9$U zk0ygN|L*{2{?7ns{y(Vj#}&RDoN+#7M|2$8fin&REDy)wQbk_`&i0xDJIw#7&@->* zDf(v>{d%lzJ>ZGS}yH468@w? z&wOYLz8rQs!4Bix2b}wCvtg$Z> z^e^bSeqQr$=Rf^C({k~Xc3MDBKd%C3e%=NM6}e++#iMV}7+C(w6M^!=d!6#866 zKN9-2&|j(OZ-IUt^mi%xC!yzc{2AzZ9e)d)&^$@*Mjc?r@lftS1;-tfm7caocbJa z>c@anKL?!pm%*w37M%J&z^QLt-mjO$pW{pyaQ2Ifz&}Gi46r;rZs$Y)IrO6x{gvSC z?{9+Nh4wnQf@_z%!A}6c2fQ`-bnqhZ8Q{|_565Q~^c;sDfu3=D7W@muVIl0W-@O5T zFZ@{v&Uxd<;EdZpmWTa6u%e3_{Xfid(bNBIV*xzjm5AOSRLC<+h-a&30`@!gg^|9-~xv%~q z%Z=-C*Sn{|8J|Vqn^E7Tu+MgR7o7F|5}ft@9roM7{%+_`#dwll*|qNNK8@8FD2^@E*#_S56R8K3&#-@*T6%f%nYrx`fo(-oZY$%TE!X9)C+&)d+`&(+}H z!_Tk5w}5Yfefs|kIOF^uIQ54d;^Mg#_N!YSj?XdRj89W=o=4Xa{2^SwhFNZkOxT8U zZ-JiYz~2e|cIfYep3jvY0e=|fE(PcM$$Q{)pkD*ddDk{@UN@7fxOlQ18(S{%xjc$+?Wq_z?lyxgEJo*SuXKpJ~V@#`OpQN`OpiT`Opvc>HiSunGe^3 zGav3y`1Fwd`8FTk17|+01!q2N0%tyKw>+E=e=GceBYX!Wp3H|sEEhY>hw9+Whtt5B z4|jnxJ})W!BZdE~@Y>Z}UeSIdg=Z-IV({BB{y%5A#E0>J6Z|*x%iuoZWAL5e>tUbs zge}nj4*f5Rem8h6T-Pd8cX435)COm}vrrs-cUob& zB%6NO1bu5}f_I z7wmIC+r`jxKihCcKU&d$2tEb*b4qPjFOG-F;EY>K@ZE?*d&?ybj9Uiu949YU^f}-h zCx?MEo)f_t&$*Tx7ZYAbeb<4%V|Xww{Q^7e@Bf0cf3-Tw#qCv$SG_EkI8Z+u{9X97 z5d1yx1CMt7n)^171gHJ_mP>v4{n-xS{Qm4Mik%q>e*~Q4@H%k%vsvLs9}``#lNFu_ zPWuxSexJf$Quv1oUk}dq`W>9@bxa*sFU~{yfO9@P#Bymb_OEf^?2osA|BZe(4ffgZ zW<$?@H&@X=2hM)C2%PJ~-#$AHY86pX(I;ci?>g;y-YX5v0VJ;bB9GCeRFZl{49Zf zEyj%xz`Ni+w^m&jpUcU2`4){e6Dd2_-5E23*H#^uL0*irQ0l*YI2{_ zm(a7lc7dm&+}5W!KfeX<4^BHDf^UKT;8UaR)Kz#}h36>zI)y*3@HODW!gnhCKZRF5)3q=Ctgi55 z6<$x_i3)F~@N|WDRd^qT-(I*HGILL$KAfLxTPyeq6XFlHwI~nK~cSFy9@gO+u zJPyu$dsgAUfU~|G5?y`SUU!4Dy*7fgzFWcBULBI0eYRH*aL(H=v0UQJdHXcz>Hj=% z&fAYncI9&4*9qXf-^>C30eLdka`C4e+WkuC8HbJFyl?#rocEQrQk(aOxhB!^ zJjimfe-P{+4n6H31nnWaQyOMgJD`hojt8ivBa`kAQxoqOW+aUtg&g`^Ax#hsV!T72Xhb zs-fIe=y`qV2+p__fpZ+V8JzliEf@c*qud7+{bS%9-=0%f-(WQ4A z6nef7RRGSseFvO*yBYSq`!#XQ{A9F?_P+p}aa(M;{5kKBUWcCTyB&Jo@BE_ZtF(9h zg7+^+SRRgZ1L%2wl&I)CLC^c03lx10IOlt#VTboA*Fev4emXekpYy>Px0hg__bIPI zPx~vtIi7zA&OE7po{Mu0j1O(WYl2?}UJHDz<>7X@N#QeKr#9@&QuHTvh|bSM%Owvv zZZuN#eZe_yT(0ozVE-uiIR$#Q*OTBJ4-f7b?f+4hhy6cJ(KiRD{}(Ad7xs^a|M}3< z|EHm6`@X8^S1bGr*f|E}Zc_9$&v)@*+?s%MeC`X*@p&FN^{c_D|HE>Le;xRl(8>A3 z_*7H)iI$5U=JTnFz9BgKX;X!dgMD5{CPB~Z$V}*Y9eEIXUPl%y`qvfxTi_f|R&{o9 zia3>9*caaX?b{jYoqY) zuyY*j^j7pE!RgO@aK`O(aMtTT%foRyu$zlN^;N+cw={6-=YrGE#o#YsJ#ZEHi{RVA zY3Coy#sA|GxAGS_|Jff;0H>Wah4)nWKj6&U7TsOBjQ?P8#^+|s!|}gU(a#3wbDS5! z`5fm}aE=@ATQ23EfVh1GJ>zy*hN~BOZOg^ZiLi4l^qg;;0#1LEJU4;U|DV8_&lP*PxG|rrfYVNO%f;cq z@SRwHyV-K_r!M?S>*?1^IImwVESGVQeqN^NM=AOndpY|jqud9;S?(Om!{xpUJ+Ffw zLeJ~q&(L!nU?=ok2dLiL`AL0k%f%n+8!7r`ioTDczeLfGQ}h!Q{VYZQu%dre(Jxi> z>lOV*MgO;=FL$BqM~vq&mP;No{wFB`ya=1kXp7D*E@K=l#p4iay~YS1=E`D-dr4V}7>m}$p4!jCI$AOQb=Y04x=s6$$5}bL}vahQb_doQs zT>L);~@W@DccKqYvI|`wRBjj^+CK{)?Y~ zLw~sCGQRx-KWjn%ui^50`8h7c8~8XOHN@*!-aN!lw)}z+5B$F{#Dh2t0sjyFPq5tc z??Bh@7Jzd<$x?8(?;)2&x9^FThuim5=-Ixh(4UHYXbL^^c>*}|;RbN-lUV@HdMyEG zy=rH=dR>V2Jq?`s+!1^`^!>o;|9Eib+b!T6AEtq`UaP_Bf35z`{{zszEiDhm4f#*` z=?*>Z%mt_ao4~og_YXMBJu=JrLpzD!jKfH9`m+I?_IH5Oe$@f4T-r~zJcvVZ-DwRy z%bfzwavuU`xvzn<+;1!o$_?WGAM`A@U$*m~-%o$Ya`}5+r=ADzW_}seYdP$EhWz{p z{1D{H2H4?x!Z*;bhn*jwuZRBoEA%Y)z=5t_EVr7%>sT)JJq`9xgnk43sSo|>&^Lsh z{C{{V!7C#U$AL57QY{bn zyB5&1-?fLH{jL-A^#2m*+3#||+3!Zc4(od*IO}^W?6BY613mlQL*R_VYv3&RZP;h~ zu7aNJyB2!(yY<3sc5wFJ|6qr4u5zg>mvOFXx!7m>9s@n&a|-nAzh^+t za$AD4+>YRU53~pD^E%iEdiKX`=-D3!Lr;G$ho1d$0yz8Qt*}G?XMr<6=fe*B;{xc} zAKwIL-hKtna<{@h+v_Lj*o2vmZSTJB-g_aJI`^u)}tF7kb9$W9ZqBK7*d+{shi) z{{v?p9yQFxfqB)?a)|@`R~q!}U#+2M|7s6C{pg0tK=VV~{zHuP-AHPEwvt%aWP`4*hz{tV9gR>_ZU$GVn>uM72|r=N|$ z*&ojZXMgMn&i?qG!jCF&ep27Va`E#l%s+nxKO4MSp|ev5{dX`p<5Oh0*l!3sS3=L{ z6jQ*N5A(p;E-!<#+&3+kaudxz!F}jT=vnSsaF)9ZoaL6g%#VX-AN4xGa#`1^h4@ql zuMK`2IQ>5Z_LE>g8G8DE4mkbK0;m5&!CCGY%cWk)D0c$%Eca$`miq`e%bf@NDX{-C z^hY5+%fK18_hEj33(j)S z0B5-=mP@(~3OLI>)^e{unty`+ek$}VHxZoWb^~X*7tuc2JrjEN_o3iy$I;;Q|9aSGzq=iJ z`hOod{eKah{=WkI>~|}mXC8hGPXE7z9rn9T(6itD1Wtec0%y4g7P)q3xz)fKx8p3A zc5j4ssRupBt0Zv7tur|Nybzpz=77`BLU8&y&T{dyG5ov^dir@gIQ^Ul&T?M{XSr`$ zF6E}7+?CL?+_m5=_g8R^Cx3%;UNLW^Yscd-9=;1s{SV+LK!3<6XNUTp;KQ+wH`8*d zZxhsaKJ>@J{wv^Y_vNtD6n5T&p5y#FaN5}d&UX0=_M5?e#nG<5?C({<*)H|LS#GN3 z5{Krn-xPZKpAJqtU15joGd-Z^bte;?d6Eat>&^&pw(rN_SE7B79plF*+`bJhm+LRv zw*@%s)gE@(zMY_FeENXXP98Yh_j1^8f%snoJ=^zIaJKIg;4JqA*k}7Lgr5E{1E-z$ zVTbMe5%g@|FTvTqTfo`AJHXk#{l>aHABXmxXL-1Nmq5?CYr^ zw(m{g+~+n`;WNRR508Q~AF5vA;>L6B62Ye2{k$t3r~N4k{~7#NJa3wNm2XGN<$3JiST5rm?WbSu%B7uSCODpgJZz=# zD;55}<>Jpv@N+Y`Nzd4KZT<%5_an+pbpG)B5yyfzh5b{&`Td9nmWw|uw<+}eenby& zJ_pZI_~4NJ`M%o;W1(k1y%zd&(NAxOp7X0mq38P5bBcZg^sQijv!ee2`qt3zRP-lI za_z$L9s;LNwJ3jfb? zDYrA~d&uPII3EpO3*+J0mW!P(u+toR*0%#V?c~5tSJ=4>oOwP5yc_ga!#>Ns9-MhT z8=Uj5XJMb;U3wLq{=5Uu?=F1^`*H21@a?d(!vr;05Bvps*6UAj*6W2E{C1RfS!*U= zft^7&y7p~@apt63oc;pD^9;*n{&ouVsnB3CpL;DA9sQXD{e0;E zhJG66MTg$*@~|h`G0}3d&++^ch36`KJnSc9@@Yp=Z0y z5AmQ~URLb90ex?jyBvCshwphhW8Rt0Cd7lS{K{9gf1JMV+jPK`TVxwKOVPCKK)Y3FgvrGN2zMlXPK-^FV1e#ZZx zzib5W55CKCi5u4e{)K+H`DKtNRj0Xnbw@j%3C{kQV!8OAVf2AN7vJUVu-se0Y3DA> z#SXu7RN-!Chx&sp7kv+udm{Ao|6Fj|X%9O+VP}A%9|3(Y=%+%@e5iDf@4xuT?|K{o z&T-&a@C(r&PqAFuk>fxj^!(mO6Gh(^ob$s@;Oy7KV4wbv1*iYlg46$7V4wa^ho1h= zR`gGR)Boqd>HlZo?2ntk*&nZ;?%Ipr*_mp&#Gl_^n*+|gdJep|$&;Xe{Q&!n=WcMu z^S~L-AAYZ`s^#H)I0kygv#z2)6P)o(1!p`vf-`QnST1>P(l+4>-|d8ZLi|0;pHuiE z*nbS;^E=S9T|NS5x$9tu$+ zS6|qv3H~JN+Xwt2=*KF2uEI~a&-vNQ_!8vd^qD>ve`x>k`<=cw^f%6m*3SdK4gObo zz}e{pJM(8p+j$Lq80>5SXTJRfPXB8^=*pdda*wrK>N^neJQF+zyd~@u!cKeWbD{4F z&UMH>;Dex_4*odm`z&}K^dEpzzY(14nK=)+IB;F-GH{MFzdFdD#Cmp}!dVR7Kw!oadrXLb+h}xnGer`GanW!e5K{a#kh6OFTfek@4@>bK0m`g+c#m3>(|VO+Thfm zY`OT;5BASi^i9EeooWj^JfE`z^o;)n;LO85;B1#!;I#9K<>7dK20hm;zlNT1{u6q} zr`#hhp7gUaIQ={hoa1CVIKQjX$#U`k62!khILD2_u+tm;eGE9yW4Q`;GGTu*^tAIJ zIPJ^_FTi#7CD>nPDiK`QUW1e`WZYJ$^F zBXG9kUzSUIF@LfibM`q7i~{HPrtbsi^=K(L^W+`N!+Ej+oO!Ytc39uv!CBvbV2629 zX|Agm?HmhEJN3btCrOrz|ICx7(9?craN6$yI|IE1{>I+req) z8F1#wgvVXn24ntkJ2>;?A@HHlzX(qI>%o~Pn=B9K$sgd%lY}RnpRDiU;H+;g%f&wP zA2kqzCl0KM0)m^I<0&c`^!m+PMLoc5Z_m=E*(K)6Ns%v~&KG zew-z4V@>-8>oXaahv)wjp&tnUABCRz@H05);g#mOat}A-c2I6d@Z-&OB;fa3F86ycc+RTt_Ye=XLfrh2Nv_&%x=>F7V1I_lT#RpO=9j1x|lX zRQUM{zZ|?G>|X`W_Ie7O`d7gZg`Ky-8zasifYbla6~0N~+ZFzs!jGBn@=eY|?pD?O zV}2T0E_p?N&JXF^TKy2{8HYk}#_d6H>fZn_MBKK6)1TiI{*S^dJ>&9+b`Di|EpYa) zD$hDQ%-iEFmvJKp<3K&=`Mfd(dahSDSM*un+6h4?%Cihx1;3}Pd+E=3O%0_^@5)By#e64XqQW2hxZZV6n-7- z@VU=T(DQz0Dmd>u9s_4ywR+yglk<)4;9Rfh3(o#E6#PoG<89zqf!_np`_P9hm-r7t z+!jF3>*?Fzyq>Oxox!lP7JAy*22MM_gHvDm1s6B!54T+W&qKMjp{Jet;Iz{Yob#Wn zz!|seESGXGMY+?VXSq*;v)t!kX9(;pf}VC(fz!?waQffiMHjb$=#R;ki~qdOZ4b_Q zX;;{xKbhe4Cl_`&FU^OZcCG`bojbu7hk4CsfO@gbOJZUN`~_OJ!f z{tO1^xHKP}*TD)4o&RZ=7aa^f4DqjKx%f{zCqkbO{ppIn891+B!(oT<90&c?7(XXL z&-wXd;FA!~rQlLusfYah65_%7O!-AF&OA5x49lh63sB!A=y{&-#R?w)JB6@wDfGtM^p z&T!bN20i0*COGXh1Lt_v8uqy!-Vu7*?*~r%gJ6g89|}F=Uj)whk5l+H3cp$5cPjio zg}(^S{`iCC;qh%3^z4uSLeKtK_Z2tJT!a4D+;VAmj;p<(=XtyrL(lVjM=JWu75!D< zEcY6PXT9pifon1TTn9c8*YUf+Z-agv__fgg1U?!1UEtLBdCmEAC-j$qbNtT(zXSRS z;Bogg;Ec~QaMt%@aMpJ>IPF(h;{0d5>Vwn&rr<2MBRI<~1ZTNpz*+7K;4F6y_;keW z4{-LEZm+v~-3NUEIQ<#*hSM|7kH6_S_4SuU^D*GGbBE>9f4OgMIym>OJpeo0x3&;^ z+IbzEc2+2Mo_@>ue+I5cRhB!>{j{fpb3biA@L7oSSa8Peq!rFSc?S4SGYAFO{l6>^ z$F1Dkz8&GL??IN!IL5dg3eI+^2Rn>sGC1w0!4B<@g`VpeSA#c0oM*!h=Wj14`c2S3 zfH-dl=k=@pJ1#y_uEaxr&I|D%&b=%b9p_h9KtBT4{YlVsel=I&<=%De&ine4!5>7u zMk{=s!mGaL>~kDA7o2(35uEvuWx3=PuXnl7^LjU4(N9$LA4AXg88?GJggESmoiC9; zwN|?N@;%4n!TFwJ8*t{&c*~`}51Vp#|L6Zqg`RPn56=Gk1?+I0>U(gmNBsuA!4w|k z;oq>&^{5J~Ts}*Df_y$W!~;9kEEgT^)PbJwr=JKt*RM_o=lWF(aOO|u`>tI$FTGUZ z!@=2qw}A6Jik;xp|D*6qtDQg8AFA+L3Lgbde;!fz3Wc}(!1=>|IvD(HJ!bpM(CE51l`cqulx6*MqNA_;zr{r`j54pS-!kv%r~GCw=7X zoDYARg46$2;Iy*>obhk|v9n(v_Orm*->*>k?FzpOob$Ss;7_33PM)rjZ&+%jq^dq642R+A=7r;55d;!k(-389}E%&L5 z58L+|aK?F~2LeKfYGYVe<&incg!8v}evt0Zf zi*mn)o_2PC(@vdrE^hSmEO6>mEthgHN4YJaXSuz=Y3CAf=4YO;x z2RoVnl%Hy!yL!>i@d}?{x!5sbOR(F96Rrmzhj`u#JM%D(JqphHKBw?S3SX-5_Z9xB z!oN}YPYVANoa0Q@FWk7ndGe8#%ecXL@)?T$Y(<~0=sPO<{)#?F(O;qHuU7QuuXp*w zakU71KH7aJIQwJW4K8lukw2$dE^%Xj?4j@huyZBs41%8h@oI49|1;n$cPTja?^rJV zg5%+b(6iia;Iy*?oc&_A!jJpX#h>$#{@{%BWXr|Rs}P@Cp=W(xRroU4;kdUFde(O{ zIP3c(IP1IcD_1X$duzaHr}5V=e`I_sGWC<6ewIuAP=D%1r#E4Ujbmqma~x}Hx!B=2 zHUymU9|6vKU8V3@;I#9G!oOAcLEpHz(aw?J^ydVHH&FOc%O!s}zFh`A$G6Ff{$@r0 zprU_N(Z8bT-%#{x75#cezY(0{{5P9ioM&TvJNjG48UK0;za0E&*tr3GJov4aOZ?9@ z_iMqr#Ou&=AIN5K_M=^}^Ng_{JkPDU+4;}+F8hM>y}w*=#%HDF;^);EXFi4gIn?VH zaN4=(JLeDM^C~#+TU&ka^t>L;1z&`6mxC_`|I%{tzq9!#nAhz9?*e|v7FRCEy%WJX z{+wpH*q8hF-iMoi%ufpRw9^jyX(;ys=xIL-oOVWoQ$HD;`WfKV&$e9r=Q+u9p{Je2 z;Iy+Gocb@pss9d~-dco%TSvnT9GeV_N;NXP>J*%TgJkA}ex-;EpFDLHz?>fopj{3Ez9|&Iue;588{BtXKZpApXdd&S*648h~heW+(nQ8;tTAcvpBtb%&x)P*zWMdY~iqOxl& zb{nePpD%ABhku{pQ&le?w}@MU`h~cjd<*CE=Sy%NKmQ<~$IsmtgZX!D^Z2<(+`azg zJlqfGJQPL_kDt=0XHHExbDF_<{Io(okDrdHXZ}lY<_|>9P#iz6qnPD<*=J2S^B+OZFzl}c^V}5m%6;!_lxW6d=b<$zY3iBHIXwC^V|US%xM8<&ICB;c{=hr&!50K&&!a* zao58+?pEY*o_C|3IVa%ExdP`r-$Fi*=fu~-{l)xy;LOi1?)KLx%yT}}Gp7WcIltWu z$6b%txfjG;{)U*l>#n=~4Zj_Ged^!mPkk%M@%7%Dio5Us9{DX%zcJ<+@1)0m)`|K} zs2>Jr&LsF|)PD}|jn~n;;9F3C3BDD6UEFOK`^@@JxV_tA^?rNr6L;IY9XZ9}JK*Jz za})Df5B0aue=F3x{o==c7S8?hDstj5?ld^xPuK_Nyd8t{^c^mdwo$(j^`FI>_3!&FHR``X{cO~)GwOdt z{aEyK(5OEJ=ihBRhn#W9`3v=&hnuJ$kNQLj!u`eil;ZB*38>Ft)MrEe+o;cL)R%$t zczXmn{5)iP)bqG~4$k-YUWD`WjU(Xvx#Uc7x4nFyc`=;tGk=MkayUL$!P(CS zGyfyxOvG`r0QEc$m%(|R*$3zIpCicU^Ph8YUVr{V4xbMsyDOYGJ|9RU?(XIDpUkLd zPDMC#>caW_=TYSI`OlN6XMR^W^It#?-)HNOdgi` zIqogwaGnz<3ik_h3c#6D7S4IDBJR>S&$Up`{N`}xKZBg%IG#JBo;d^H%vlZRJb#b; z$UMU%^Nbvh`zM^^-aroLIbq`X=Q#(QIfdYy=aS-jo-3lBeKv$MzX@_CVV+x}o;f|> z%;|$1zCShy^~@OwXU+~d_t#$JbAO$IbAMez4#!QHB%FVan_S%8%l(xO^~@;@XHG>p z_t(S7UmqL9KmVzRdgix;Grv7@_;aG?P|ut}aOMm{4)@nvsAtX;ICGZ6`8e{e;cE^5 z-tbyUgZ<^c@_Eaw>SVI>Qg5ei)oNHByH; z?6WbP`Om?bGX~DzQ(g#X{-8ABxP1MXIBnqW>ttLH(}}y|jn9+w7+wT9?;xj)QU4vB z$8)80VW0fH_~+sLJmhRRe=mNcxJ#RYes;j$iQVbXqeSV$aSvfXmVt8~Y8l?t@K$i< z_k#2FOMh|K6<pkS$hkEABfwTW@aDKk1c*d|FUYCx-kK#CKa!**# z>tP4OpA&cAwGaDc7Q9UCPJevfLJr5xm?;?7eLaMn=fvIl%kAxL_&~$|fpZ?JW)8-6 z`P|+|4R0pyzH2Y~91hOigZXdiguB*QwXE~k^ zRF#EJVuxVlylVvK`TM;1opED1{`Ufgpq}UND8nZhJ`K*lOLJV@jawVzR?6Wd?#{b> z+};}EZo7DVJ_+Z3Yzyag;}1Bm8&?famNV$bjmz~=vcccP{FjEGz;&ZBoX5lShL44_ z|5I>YA8x`q52U_a=x&C?n77%y$a{pFBJe=RH~H(sP1JM#@5&#H>%M-7`AjM9jvv;iNBu{r&t}w@M1306S2F5rp?((X zA2aHoMg45l_cH2VGyGlT%t6kFM*Tw6&qe(*qka|Y=b?V1QNJ7YAEW*xd;|9HIppyA ze+|y-f7}DXes}wq*Z&r99#-+ zsNahE1*qR+)Sp8=9~Z6|^>GD)`E*|wB0ssfK94e>{u9(^H|q1F{!`Q!GwLg#{xj59 zH|iUqp2yoWa2{`+k;CJy7o5l2SU9hHH{kreup|!#^Xca89$fd*!zlc?w8e!_y`@v{W=DaGA9us%ELTgATB zU+3?GFGWrf_%e7&T*mzbl;iBgEY(BV&X3d7cjc0`s{5ITz8-A~^FOC>-?fzBY?}@%gQa zgwApM!N0_~YsB3=F#i~QJofKhMdQ!U249Z+{NgU3+f^IR*U=4;(>*q>|D4_o)U%&2 z;LQ2f$Vpx-=->6j`n2NiUXEJ<_2;l(dciqwLk%B=e7--t6!kqZ&j;aGG46HbaR1(0 zJlro|Vg7TAyY0P#oC0w6KLa^Du8x-o^EvJn_}3Ws7W~E7;QshbS~8q}9uKMD+}?-8 z-FNZ*@T{f69QI!s&UJg=6L;U$Aoj)gv!-;I!~I*^y?Bn@^l{Qq+}+FLq`Oi7l2Ko> zY?#mfs~cWV+^T4TeNn?tz`0$Iln>{P=kMdAqy&mG0}eD*{=e-5$0ZxDC+oS$u|=lmqE6y~@?)t?td;O_4;$2RTG ztvS3bu2=2F-MBoS`@wJG_!$T9i|1Eg!uj}n0?wR2#oboChW`IXJ^wCo`pV(h%p3eiP z89om=tC6$BsQ(tu_tVzH`8nI4;d~yIyGpQM-2C(BDb?XTuAYXozN_IQ;QYDXL^yw* zG84}Fg>cq?FYdM?L9+09%U;y8{|j*TpQ>s&4;(iOoa2@gci)u=tvGZ;kf)f&pqPq z-p5d%!>BKe`o~dU+NiIAdiT<&a`5X#aZjVZKDIY`jj&ICUaKgaudmC)|B4-4em-9m zcWG|ifimu!sOPvJ!#VDL!;{nu`{es1>BZf>YcW6fp`Pz6mVxteurhKUkA?Z|s)>5$ zG=sCBDacueerBSct@sDA?WPa5^@QP1}kd%*d;XdrU<{?bS|-(MOJ=le_V!g>5}gY&q3qINLP z?yEcgSIF`IoVdFV^Y|ZzdiFmS&gX%%;ZI<{d?N1hxgWnmeG}BLG3s|3z8}u#Z?)@$ z+sos&rMT|rIm2Hz{2k;^jt%9{iy5frakvQeJnxpHp7ZlPJS`p5zW{&d0Uh^}-x}E`6lo!|NK}&G5l+9{-c!>}RIo^9^5W z_)5c1!OP)w)_FMlxdP|&hm4Pe^TzF}V|Wk4r@%S?9~-{b@ZE+tbZ=V4Zti&F^NIy< zZr2((>yH?I8(tUB6H+$}$K`RpT-@Eu=O^Eyp6fR5g{Q}PaSqPsT?HEj(nBqn^*lS{e1-;oPnZ@C@iP*`wh+u+LnEKMZI7SU8_o?}c;R^Kg!vxN-dbJOJmo zL*abh@;02W-{-;k{9zTG{pWow?1%kVgR}qUhQDO^1jDbuxxJa(lZ@ES9Va}mtBAXM zXUD$y$Cp~D=i^0F!`mWfJsxMf8TI1~pMjiG=x3HuzYxyr+ZS*?KfeW!%tMp-=jSc2<*45R)t!@oh!M&xWT>JJ!x0y&$I^Bd~9~M?nFOxQO|xpgR`G64PRyW z7WirOvrF9d^8@<1f_nDz51joZX%X&UdTPV(5qIA;Gxo)w?>SJ<>sUV2??Ru2jrvlk z=g(iN!+G6%49@4b&m*7n@DiNc`-Z~z_o1Km$l?4v2WLMo8ve53!{I!y z$B4T=d0sC@J^T3@&VJS!zS;1-aGuwP#a%xAv!OTq^FK=d;h>QP1ncpQz{cBwgz;pVxtc;x3>2t0bJ`Ry6!+ z%Sb;D;P{{Zq=qMrF1;LP7{_-^D^jlJLEKfm!i{2<1?1m|@u@iXB( z^E#GOT+eeUIQy(*_+!XFgnrtcaE?3D@OR<74$KsHTg~ghSE%Q>Yv3Gr zli@$XdA=VNcjNMWzm9s2o1jgwU-WsD-0*wF-FNYNTN?GuuMFpQ)inGuIIkO>;QSn5 z4{_HIAE)}j`TTPV{4kD_&ymmmzk;*>HHPnl^Y6eM5qEta!MImZ&v9?VId0On@$awH z;_lvj$j^j&UiWgtdA%*yF35LZ`MR$M{Ac9%6?exEU+<4J{A1+sdb<|&oQKVD&ciOl zv$qfDhx31*xVx9HAFHCCGT_Ol4iewG`axI_H& zkV@R$%h!nypq}FvgLB++hCd7E_VyHaR_Y16=}l*H2!Dw>}%z^XD2FyM}%Y+nZfnUxy2zJ~Qfz8}-!< z?+ws?p|IGGr@U1EQTD8TMo|r zhYWul&g)?dan}#8hrLkGaR7*LIqtV`j=SFQEy%Bl*GIpi zp8Neg>W|}mOzPh3j@{h(%YM?p*-vJ}3&MGQei+W{VLdqW8;iTHenFql!1?@b0CL#> z5IFNkBZt@j@kadzaQ6RL_i)~L9qtOxg2#)O#oc#h$94@xJ@Y3SKHKom;N0Hd;Mvem z;vQlDy#5#L8G3JA-^#)7MNTa^e{S1Y+@-ny^w;fYP|v>)_A;D5w;c-S=ix_*yZjrm z=L7!l(vMeOId;FheF6VFR_}k$>p1c`?r*5)-+RA?dj7rl+o=C1mha9dcT4g@FrV(L z^TKyDE-t6??Be$;&nI3{x$pmB<$fNT!TERQyNTcF51+dj2j}sy4mo^2a0AZg0||Qt z+w1aqJf{|S_wxBbCZoQ9;l1I!z70mcd)$|g#l_7Rw+Ni$)-t?-xJ%>pswL_<&;8&$-`_$GuRoJe&z!l2e`)w`IJfH`IFG9Vy~Fw8 zb!Ip`2d*=d;JnVv6nAOv6!h1b&rr|n%oaHN{1MLU%mL){I&)09zs@9iDcCOemDib) z;_kfQxD`;(>r7qL^E&e=>Uo`Mrrcj=x-0kBnU|FN>&z(S{yH;WxxdcLf%7`ELR?>G zj>3679O)Cxo2%#NM(*w#I*-q+;_lv3u`hnV=QHX{8(s}L8S%LMh*94P&g)MPIQ#4i z=i~A)ao2wujQbYq`M%jZaDLwAFr4$2qhC00^!noN-VK{N%Ba6#c%oN=`Eg%)z9biS*JsXiIyldl+HlVE4a3t93ik`omj?~64Cnc>1^y?F z!(ZT>|8wGQ^wT)bFQJ~>dmGNe*)r)bstf zHmGNxUEmzIr{Vn!e;dwzri#1%`TpAm)U%)MaQ3s;@FRv_hqIqMzr-Hv#r4CVj}(3_ zoPYLH8qR(y8(!1!XW;Colein5?-NcyJ^PsoXFnerKHu>5aQ1Up-1Wov4^s>Y=ZEKG zdN}*ZW_Vu13mRSv&OTd-yRP_t<0#a#&k1n$Io0qF4WDoLCOG>%2IqD7cX8MMZ@3O$ zKs~R+*Wm0w^U!d=aNJ^Wj$1+8eHX9)RZ-7zYr{EiJ2=OE7WrjjgZSr@{ouU*4~O$} zM+=e9{kRm)epVR%o#9&zKMm)0{UPq=?F{zUKX88DrqJu*eqsNm;OxJW;WZ3@#PH5= z_TOFHb@e;?e+ACZ?aW6G`(F%a|6d!v*6_`SpM;R#Xrv_;q0@b;nfYV zZ+J&I`+P;*b;axFeAGwg6V5)rHhit&n+-n&XP@W9U7tKpZ^HSxqx^5gKhLG$?7x!X zH4J~m@OE(a{}TK%p7*{5=XGxqoPEA;_&oR}v(Ys6#b4i6pq}IY2xtE%;jF)i z{IfVuZyNRY4iEPW^Gm^*Uq#$~R|e!)M?J6q_2Hbi#|<9{=j)U%qk=x&S6=5AiM!WX z?Eh!Oufn-qN!|?e`M8!++~u=A1DxAc2swP5YKVHCzfIxHX=V5;$mi!&XP}<>bK%VY z%DVkDKM-eB5jy?#5-GZQ<;dENdN&hvCVocTN9ygu)Tv;L^znZ|_k%+I^#5_k9V z`BHxPA2_b+!1;OCXOYi&djZZq`x`zO`TSh#hp6Z4#QAXMe}No6eyv13=l?LA*XO_B ztiO$XKE5Ox8_qKyUsA!@XGX)b8=fD|$DK~&f^pqfzQ43oTtDvoV));1Zf}b5VLl&s z(unKFoy>4HGak;IDahgbDqo?VIcwm|*^L}t&#$1K`{f@vbCSFr z&I3KWxVx9v^Gc{^ehoNt9x=QXoY&iz;5?pR6?gsc=MJxMI zkHcj~{r86NMNT?ghYuR{^(O}Nuea-Qaebb)gwMq1f}Vrt#rwTekk9MtOw@B878|}2 zIeh-V$*4aK=k+;mQn0;xyV8iedwG4%Xw+wibN}Wuyr|(_;Qaj9WH_(eEhmTji=V?; zChoS2+q(w!ybfTZuTwY^E$a0^~_%Z zXZ}SvKL>jo`MiEUI3?U(=9hpozr48nE?z%dpq@Ex;mqlb9DZ)|B{)ByISo0?p9N?B zI^^*Bd>-|@eqMny=O4qfyc^7$`^xKcIdOL!GXEhs^XnMi3eM|u4>*t8{^G75UY`e{ zp4aC$;Oyru*cbn}aMh?!KGjtQpF3nu z261;U9~ZKqp7Zk?{61XI?|U!I=k=;0JP+z?i@Wb?8vEk=Z-jdG*~aj0$l>+BuTeh~ z^%w9s_@+@m3C{gB-SGX$=kazF_1vzzr-k#z>-h~hKmV5W{jfeC=JOsnKmV3n+zP|wf5 z?N#nS|8`!v|NPru%JaqM&)rf?59Z%}b@~4DZ|Ri#&%fn|^Yd?&#ohHV4xh7a1LyHD z8997>KY@BazF$B+AK$N`p2uOy8R2&Ear_B!*C!ue`oOurUO^78ljGsMPA*3duakS= z%)elG!kIz;u1{`PYH@cjuajAg`a*_RL=LZ$4;l3hP|xc?Yt-}lITX(R--fe(9`bqp zT!eb&tTlW)a(Mmx$*4bxdR{-z8TBbX2=@#3;{%322Iui#=ELy#yol@e!{TngZ;O5L zk0Z~Z{*~B$OH;?b#BQD7mypxT$Qh6NO0gDv{v7z9$ob01IcfOc$l-oW`cXJ<+^%}! z?%p|goz)b68T~wk9Ilhz4*ocDo`>`AH1LCU1au6H06ZQKs?pZiLPkRYDvtri)|94vM zc26>5H`nJ8Tz_(kyL;VnTR2VZOYC;P@>Jr*ky8u(RE5`s*F%nbKh|H*TfzCdyA!-R z>OVk!PxyDJ|1q|4K7Y=(*+YgyS}d{iolLSHxq{ zk#&XEej3*AME!PgSI_J7J~*!f%|8os4x;}B;x32t`5Wqwp?>i&yq{Se#)ZH5#sJ%t}ph7;eD2cIn1y2Mf^Tn+}(RM_QfBc3*r2| zgKy#2F#qe3&({k-p#D1Qe=_QSf%ES+|ACwv$hm=fj+^w$aC@1PPTbx5H*zwep6^rT zg!A_fTEctcy8Sl%0X%NjSRVA_zScnf40xT`oqqo3h`Zyn0O}XO`8Zqpt03RibG?}E z@WSZlTR7|Yzzd-MJe-d^WxtMp+?L*oJk^d%~`A@G1a@^OO*kA48x8SS34acpH z^JwJC(3$_C;p+|GZ}^(kVV`fr{?qTr4dQOU6vBQyY}6k&>aQF1{}}amtqHf6$4NGE zcQ5Y0;jTm17`$MDH;<}878-Hml{*6$E^qx1FeKBGR*_OQ?4xGvRz_r`pF z0Ox-H0?z$jVn>+I`r2^T&w}&3+iiFv_vAQsbH@+sbHXd)JS_z0`y@5s%$aTY9>Wv= z5Pv_-#ofKPVqg4m*ar37k3Hc$4hJHK$MbO1GiL^zIopxrUi$lfendT={~U(%I@V%W zxV>C=qpP^PHzCfKKB#A(Lr{Mg>PH#%GvR!{ZUJ%}LmZ*v~$r{t}%1 zl=?CL`Dp;>`-H9G?B_K&kI(V&Q8<4W!u!H^z?pN%@YcJ7{@vHan9ok)F^c?t?jU$k zJid&BbGxR%`8Ylk&i8-j8UBs9>oW=ZT!(t@_a9NuD)KQZq2LR`B$9JaX&k8w@%fAe|zsN zp1x+(7sQ@(yIW4>?r)E}TS4XSvtRCZckSTcK0k$o*$&uIN2sjvS+*blE8*?Wb~dHzf;6z<#k z^UXBF!uoQF!{@6-;Md{(M+WtN|DKh8o*fnSOtJ5Aw{dR<|MvCnJyv)7`K{pJ-rI`* zuDqN0Rppz+?-~=$86%!X`AYHOPx&6&2gW#a`E%kgOpE4k6@Nwf9PyFL_li$a{+)Q98PWXmvFCj5Rz$g5W76F! zD6b}7OSyZE?QX|D2>$KoXS(<~<^9C3E1xHx_`_(2V*B2k4{7LaQl(!YnGe4TYRlJDuIpP(R?-j45{5$a<7Dn^SrwIQ4 zu=4cczbUUK{+IIN;vaq%&3{+?Q|0}{zg9j>e1r0_;=hO|iVagJc8>b@4U#Sj#?_wf z^JqW2C8xi*tFM5ZflH$G{`v6;<+mhf*cZ|I(kX-gAFsTy`1{J+h<~iSm-sT}UB%ZZ ze^-3Lm(hOaiO*XZ_1)r2l^+p*Vr{fOS*qawpHZG!{5j>N#rrC+EIw4Z&l#({q13;p zys7wH<(2O7`NO*C{Cp(!!%xj-tekB;?LP&cq>G2$tIiTWGjzn_Xff7q|l`V~??-thO8`_I{atlZ};GyK)l z@%OVw+;8u3>F3wq?^~1$a-H7@^@k`2=iVylbT7O);{LR4K z^@P`fdgA_gPL?jH>-bMJr-Aqx<&TM9QC>zo`R!;<74dtN7ZG15e+k|9Ge~@7!UT7M zye|i3HOYS=SJ)5t%RzD9Pi?8+k|&z;i1ndqx`sd>j$ItDKZ87rK|Gv;(e576Ca{HulN|{9mJ<9?=C(^c|Y;R%7=)rR6bgK zv+~K}dzH@=KdyYf_<7}(#cwFDEuN%cbUqu4r&s=zcuwU7#S1DgDL$u2G=I1FV&#X# zS1LatzFGNM@x96~iyv2hQ~bR0B$ZirmE59HM)OCDr&c~+d~TDV-aQWT^D`xyM{_PoeHG=MvIX;8PkDXurplX$w^i=z zpI3fH#_g{>kK_zf{-F4H<>kfSS6)s0W92Qymnrx2utvG>f1C22lJk@DSHw>$A0>WK zxzGRo>F9o$FZEZIPZ7VXWwd^#_>NXl|5^N?@_pi4TSx2D+#Bro{mPSyA9^NQUrzkA z@`uDH34_01Ne6;eW z;tigQ=JyeAuDr8&v+mLQPsH0Pe_y=2^4;PCl%Et&_EI$es(41_g>nS*kXw0W@xsb| zPI<#?D);$~l_!z>mde|RcTxVBcyHyy#0MKb+VEHVM(1a~<*B6q*OdGEx0IKb`gfHdmVRa{-z@&Q@*l;&Ren=^lk#3N z?oZ;0V$)t3`}a3^Rrp`LP2L1O^oc7!`Xm{*k@A`1Pbr@#-br~{>9d#ehr|ad ze?oke@|}`DMfnKvS<2^2&LZWD#aAf*MshYP-yptQ`4aJ?%Ac0}v&yea{cYt5r2gBF zqw}9Ff3SZyDNifDM|ooLW6Ezy{yF8B#IGwqBc6DEw4a~FGbrCBzIQ>iezf#+LU~Q` z3(7l)-&Ed1JlVo%eqZs7%7=*OR{ofHVdX8wmni>2eEuiVaSw^#_j%NFJ`n7$V#*&A zucW+%cpc?$ia()zsQ5F=dx}4&e1LdgR{0|F_ms~SpR4?R@g>Ur?{%zF zzFz9LC@(6$PkDavkCsH||CsnvrPSgy>lBi>Yb74f#pTZz9U?&g0s=6@J`F8ui)qy0>foc_vp zh!0c#q4;>^^Tog48_iE&B$&^;_eDK{cvj^l#qU?1SGq`D0(k~H&XtN_*2S#ekbL3l?e7rFXeZO4^p04e3bG$;**s>CHv(=zDxON@gvGBNS|kv_ZPpSyoPwf8`1sVP&~ErX5!hDw-L{;ysLOg<$ixvReoOf zZ++$0#hWRgD*5e{&l2yh{8RA(%D)tUL-`u<3Cg#KPglN2e7^FZ#lKK~UVN?cYvS9L zCoCBp&j*yJ6hEc>9`Q@cbBX_>{6X;)e@Bl8-+w0MFH3!1Yb#$N z{>I@X`BglP@}#AM^I}i}R~gnHDiipgBvCIf^~aRg5 z3&ayAjpi>APp3Sk^pi_@JMluwUllK>e581N<=e!YE1xX=bWol_>U%1`SA3xI`@}~m zFC;!uc`5Ok%BzSkRQ`?hxm@`=@$Zyx5#OnNkN6?wJ!IU|%KM66R^C){;*v%8?=#}5 zly?@-qP&NAKII>YmsI|bcva;o%Ld1DedTMU|7Oa^i?>t$u6TFl76 zi}-HkO~gl~jOI)bKbb!2pO*`^t8&JuZ5eIvvE8iquUimEX$DR&y+;yJ6_t8$=-RoX2oRa$P$}fr!P<~zf4dwM7 z3g&Zy@~q<1l{XQeue`AM7s~UAuT|bje7kbr=Kk&MPk?^*5AP6Hn4A{{5a_c@C-1 zsl0%ALFK-mvdWuFeRbu&zLD~VQeU`jw9iiB<(0o6UQ_ve@y5z$h__U}RJ@DwRpPys zZxtl|_)+C0#Lp^kB7RMI zJ@G{CqWi0xcv|Ic#j`6PDD&`R$7s$qssGvVQ(dChmi1;}%tZKK|6_a~djtQtDeMZ!6wW zxvzggc~7Z-MY*pZseFLcPg3sdKT!U<)PJJf*MFtFpwzEd?(2V0K1S*fE1x1h?S+JQ zcC`EIo~L~%K2Q04@f5wI^}EC~DL){dSNYvFg5#>F^2Fj5l^>U!voA%*%`WxVl;;ya z+AmuFrugmtQEwogazNDki)U8eL_E(c(fU2&bq7U#vUn5a>%`kApDsRPcr@pz_(bKW z#b+u{Q!|+7g~~IFFIWDU_;<=%i0@QhRs4|h+Ty2`4-~(w{B`lT5z*}(E1pXEJK|ZC zZx_#}e6M(M<;TP;D^FD`n76vhGm1A+{+r~qQJzccyD5J_yr1$W;;$=jDLzhlXYpyu zCy38eK2?0F@*d)=mCqL6s{9l2{mKuBpHO~F{DSg=wS#%Ssl23kvXRl_p^A7$<+a3f zEAJ*=Sb1;p^2$FIuc`c1@y5#6h__UJLcELe;o`lOeKjj@v@Ks`5tS^_7nmZ>IcR@pj6Wh<8`sO?-gzdE##<|5kj0@{Qut zmG2Utulz6ZFO;7VU#mQAyfbv4(r^PiKiGB-CteAGbwK+ zo>%!{*{-6>+lp6I-dJ*KD}PBm!^CJmL&S3#{^6u({Y0t%)bOvBZk$Ay5(Q)^RmsNgNyt?uS z9|`tvBjvfopHkjTyp!_FlHW^tBdH&x{2}pC%5O@}hNaQ%>MHdI49~YLTHi+MiyQu% za-aW~;YGiU<`0$p6Uu$g1;f8w9?cmcIqQ`77B93WTK~CtIpy2LYbakQ{;2Zo?nQI# z_O$Yb;x8yKDqdn^w4aZ}t0Ll81)&9`aE#{Ts{eMb|60`>iPGy)53p1y zqrN%(F?csP`+N<~en!ICzx=tBJNupe$glg~an>(G4(sLDRsWN-!Kgn5XTJP;)14gl z|0n9Xz4CGF|MZzWxJ=%0)~ADW+^leJmwYViKigFa^~|XSXO8^%@jrdakEiZ9x3@EL z=wsj<_iZ@qx4*t!6L;qY zbMCq;2C=?;OwWh;hhZcZg^kAUo(6RoYxJ%?xnk%^D`6m?B6}tayMP?GQD%&+&SW%IeuM7 zopZ&gPZxWP@Hy<$uLJ46jpOD-J;yBzXHF$Jb85nw(-O`czs{uYryJ^-)5mbX&ZM57 zw^7f>-??z+uY_~E{Q8zIpY=bYp6hoXfb((u6r7LaSK&O~{Cb#r+|=@fPrF|aQ_n+D zqrL{5+w0cqayOmd0nYvSESx#L;G8$V-lpzzl2N}1&T*H)Ij&!a)8*6sdY*c_HY109 z?lSxgoc;U(=eW1T-D8paXN9~_NGku<{iHLzu(-~tgL?Mk*Z;MWV)IeuMG-H%@v zRQnr7KOY$V`1L|{KYo2to$uEX)t)L@Y!YKP=iJ_OaL&J9UsUJ#bwstlh#cno^+H`e z^ZmM@em>92_WN~5b-rI;RQoy^SLYlt`uPRUe*8M3I>)b5s>k)~k!mlJ+|6=u%(^VU zUA4qrJ?F=-N9vsY`1MG2KYl$@J+5ExRQnr7KOY$V`1MP5KYpE3-%oa#N52lL9(OPD zd40I3`tdobe*IPLOO1YZ82$KlQ*}Q_P|wHlKj7Rie%(};!^he5@`i|WKF;Pc`~f)U&9AfS za`^b}*JX9iex5dR{JN~Jp7Y-Y^~~|>wd#DoE~|6)`GJu$56*FSz?tLMan*hLbzF5n zr;)?{?~*qdb)SCSSDjzXsQ2r>>UzKKtM13I#w?c&a+=nRpdoA%mp=05`Get%lro$v0oq<{V14)xpMew|V`E??jI zbxL(VBaqWB_FTy4&xEs2zkaF9VV{1zQ=PvIIh^NhaOV4UP<8%!)H5fEydm!DnUfOE zJ~P6ZQy9*i5^(1Dbxrm5R!2SapMo?0894L1z?m}`&YWRz=J<6}b)S<_&-_o}%wGa$ zzF!Ab=YNNK<{yGH{}`P4XW-09C~w^B{hk!g9KYVF?lTMOnO_{vKFh$F@7Fuk`SnoG ze7|n0?*9d&-min|>N&1oH&u`8*GJX!#}bwMPA6IOo%^v#PhtubZm# zFCmBX>DOP?^$F#DQ0;#GRp;!dfKguz&iOA7XFrYM%x?;3PHQ-SuXzZZIevXt*FST{ zqMrTCg)_&m2di`Zda!!l4jDPe;OyrNoc$zB7i&Cr)AOGc&YZMx<`jT)yZm~vdb|9( zvU3{j4_JuS2Wn`B$SpN&5KrOG-HV zNo#lkIJe8MPy3(!f_iS3U*}fumj21eZlZS zaK28Q3}>I88omV1{o>c-)!Vfi_1v!AaQ1%|&VDY!Id1Zd@t=2oU0>Z#Ce*W^f^haz z9nOC0z}e3;aMt_vfptIKP|tn_!`aUiIP>3!v!7*f*86pdbw3+X&wdUW{yUs~-X$Nb zarqqAuLG>dO^bStTN=)s3UF@k6L9w9*WGpF(%T#LFT**mU#D01KMeJJKW8$W)gbd;y>^FI>UN?{5r!r->);Q z-LEsO-LIpo-LIpo-LLDb-LLDb-LLDb-LLDb-LHGB-LHGB-LHGB-LHGB-LHGB-LHGB z-LHGBeLnUVkHe*g?|}0-@#_-1e4clHU1B}1Uzb?BUzb?BUzb?BUzb?BUzb?BUzb?B zUzb?BUzb?BUzb?BUzb?BUzb?BUzb?BUzb?BUzb>W*UaI0$Ne}A&i&=rD|R{DUw(aK zoj(;hJl~hWneW#(*7<%tWSzemIqd&9ocX`P*}q>WS?6CvJ^Rm)C7d_r`}LD`|9<^s zo$uFS)?Nzv+^$F99M`YItjG21Fzfu+j2yo{v(EABGwYn?M$Wfz&a+>)S?6p=J-64d z|E%ke8}+x~oFBi=v)-;0@&R9+pV4r?p0lp^>q2X9j2!mU6wdka>q6_C;izYhU$@!S zGsmwNt#kbP&)WSu&)Sz_T<#aY?zF3CKYrb5o%4&4d{W{V*->*BZ^D`rd`6c1Z_v=yXe7_#G z&aZ+Y-^LwD4$MbMFbNqVOI%gv4nX?eioX_FhUthzSvkT4~zizhf=K|{a zIwD#2@cdQY3`RY3rofrw*VEQHU!tBlJK)Um>u>9vv^m0g zV2)o0+toA2uWPMyx*9oty=$H0*QwSyOO2eZaQ5TZuhuzdP|xj3m^0j7=J<83b&g-x z+BuKI0?1*04LI}tI@mhDG3uG$LfrlQw`AbYHo4KD{Tf<7C-nbRE3{{8yit{>L-Ks}GEzHs(G6V7_S z&bHoOzkaozAHROJ_Jhc;gzY^E=lf=Uy=$G5D0gf_V>j&?bKl|rcriG)w=|r`Rb@E) zX#;0YM>unyhjTs$z?uIhoH-NW%$a8REI9jI2xrbx!&ktW^BtTyTMge0XU-uwb50n3 z7S5c@aL%V+m)jjDd>=A*o*2Y#&UwC+hcmwlobQW1250}h;e21TKb-q_2%P;-fir)m z;fvwiu5EB`*J;Dg!P)0cIQvPG_s(?w=e)}RXFq;DaDD#PM13h-A9}#2;{Dr^aOO`o zd3k2Jl^}cX>dENHwd%Nu_f&TqEfN!!-}8MA-ZOTmf1cJC`JIqI z2=&YvihBOOuwPd^QEXg(-ftZ0d0fpje4gQc{cxAh9KQ~^cE1j}_MJxl0mJ<|;1auI={V9KMcv_0j)cf_@b-iEjUAtc&Ub|mUUVFa$Ztwp0`QAft&c9#3-Q{o| z8laxr+tP5q-n;I{ulKIqulKIqulKIquRpJSveD1yaBi<(2j1mydsm{K+q)OeoP%)Y z{37nIZ@ChOuR{|&5QEswx%K;=x#hv76qm?1n#RcnQNR82+%~j~M=h z;m^T&T)hbA{11fl_!%m$uanc@yiP7f4)ec)v!6A{;dS_DIP=dUhsS@?g5mz+xM|?r zu7YsZmk`(6`zW0Kv_ua3=?iE6Kse{&HN)R9d<>l1^}gY=4gbXOWrlxi_C}xen*J2?~eD z73-73Ic^>}$1Muy`CbOjajU?YUklEDTERJPM>wCKyaeaCZ^4-}0nYlVaQ5?|;qwh& zYWNN~`#A*Xd|rjK{wAFLCnyr`UwU#l=PfUs+gs4^l7>G7XaCLM?EiVgd%@X%U&CL8 zv;WC(j{6>*`E%gR`PA?)3}0*bPjL2g49;=S8UB~yaYe)Z&YV<+XEZ#w;e`#a2IqX% zg|nZghIcT$r{Mz)A7S_mIOl&ZoPB;~_-Z(h^SyB995?*D;R%a{`;qgR0?zz<4S&$^ zx`sD4{3*jb8s5Y3eufV*+^=7)Uw2G4>X*T}e^WaazR&Pu zhMzb5y5V<~2=^oB^KQd48=l8-zy7@5@1>3U8iqGCyqV!`4DV`qZ^LI9{;A<#8otKx zEr#zg{Aa^|GyIz22}{Pm-%}cXkKwrtf6(w!hF3GZzTr<8-pcUKhQDC=%Z3j%{7u8( zHvE0V=NkT*;VTUP-tZp`KWO*~!_OO@u~c|m@pV%kIIlBB4Xr6Nj8n;hcv}a6TW{4(I1ReuVS$BuC*tVBBBf zd_4UF&VG`X4)-JbDPnj@IP=RHUJcH18yeo!@MjF~Yxde=^^AnT}_dD~G7@pGb3~pf z1?RZs4X*)bervj(Z)>$BQK8 zg8lA}ANP;{yxD!??s+>O$E(7bUjxqVY6$0cH8s2yoa6R`bKF;{50w>!MVLR3{PJn+`pX9%y5pI8{PoNLmfDCo`mx}Y7J+8UpRjcWh|WA zH4)CAm%T6U=AVCW@MF~T?+tzm=XrMo&T((RIS+X%#y_9=;oRP$aOO0Hb3UJfGp8M# zIbGrGe>|M|li|#t4rk66aOQjiXU+vUueUeF-Tq36^Cd&2a6T{KIKLOpesaV4I8_?n zALnUfIQwr7XMRsO>tBL%dk4U|y<^4o_Rd8;xA!wR`&kO-_HKr=eg~ZO$KmY%S2+7W z3un$PILA#`Ioyw|zX#6zf^a_07K5|TN^s`Xh4cE;5YGG-aQ4|2&iy_d&g~r!=kt(- zaOSLpbGtUe8{m5TBb?(NhVyxQqAKD1bKK-`j(ZQB`8nWxTrLl1eswr=8W`Tp@HU2b zGyFw3w`(Ar{Y-?j|99cc`4G;W`G&8BGk-IjImh9w{}s-D&KiCh&itE(XRI3kagrU* zoYHXiSpm*Is~TP#&iqD(w=lfD;iKW~b0VDMz6WRjv*4`%6wdQ~6P)AjhVwi<3Fo*M z;T-q6;RzlJ_ap1G!r4zgIO_`=UfS?_aQ5E>&is~!cY?Fe7vRk4Z}=OAk1_l`!#^^7 zk>Se?-)Q(w!;cz%+VE?J$5o5}ct~q_7Q+h|Ufl3%hSxQ`x#4XLf5Gs9hQDt33^0|M#J+NUfA%;hSxN_iQz2` z?`C*!!-p6?%J7MXe+K7q@+F+}xytZOhVO*)c-RkT{&B<48h*v_6xHKD9`YJq(D2fR zKMLo(JqhP_J!AN@hWCVX-ul6rKg96ShEFzprs4AqUkvBpx7h~g{Op2ryAHs)UB?YS zV|d~k;eO}1cf*-~kKx(j>@y#nIfdbzhdOZf(*Vx=CUEArhV%JYe>n4Bhx7T^Bsj;N z4(GV@;2d`yoa1hXbKIZd9QQPw<6ba4P0jfCZ)P}iav5F~&i-q|ne&+8EevmK_&_+v zeI3qm#~S{Q;WG^X8qRT7!MR_)GklZb+YR3f=XM=4{5Qid8lI|F{KrE^ILFOp_ydL) zGrT^W^Z6*8^V!7kmT>mj+3+5Q_ceS1oPAD(bKKd6e`5GD!*{|t?jAVj=YZkI;q3Dk zocW1shsOi!bHiDGKb-v(G`u97`BebwI*zo3tcQL%D;jb7z(eP=8&ocZ|!#BZsylsc`_}L5RemP?JX~ShuXUjxqkN8rqV!tm$d%%`^gArPE9y->cW}R0M4AzaORAIGiM^4 zIr8gGclOt**yEc2{HNveYj*#sw>)_;ZFlzLH+bBvE*_)E->2$mxO|N9KgZS6M*aVG z+_pweFT?#I=8h{qZ;`|2KYg;E&maCL_5WbrnDakz`7zr6V?WIKpVYH|IjsJZFCWAI zkF$Ty+y9%Kq>01ljm)<^l~Mmc@&C#EaNPed>e;82FHckcGygnKd3~0{{LXpmj_C~P z199i4yE$|JG!akcFn06aTs&34|9VUDw94CvXH@Rj6V0N$i_~XVey@0L<$nFte9He$ z7l1$BeE+|T7gqHL#pTz^|J|-F;_~Zd|N1xL@-g;*y_amLeC+XGKOtUCjeA#th}fA>&knJk5JxEe6;c#(&sqk?WBI9^2f!eD6cL)O?gT2 znacgRvy`8aeZm^FZf$}fvAQhrT*sdB$=({kl;*#cOhJdyZn<;ldqQ|{N7+Nk_T z>1V6*b>cgfFA?9Z{3G%G%HI}0qSSBf;;^6aFKW-OP33vvGVfbO_Wy_Z?1ftcuVE4%eZZn*OmGX${UDxQQla*oAM^&J(V{X@2$M0 zct7QB#0M(xAU;@m7xCAXcM~6>yr=kR<-NtnDeosfQTageDar?nPgDN7_)O&^#AhiV zEj~}V-@gl$Pn7ya%4e1hV5#zHQomezH91aJC~qvjTKR6t|4#XS@r}w4iEmY&Tk>}* zuPMG;`Dw}7ul%g|A>|juk1D?`enR;*@zct0il0>;C-Zqhc_Q)4%9Dv-Q=Urvrt-An zcb+iDt}OogpHV!K19%qkWXiLPr&69?gFD;%=d2`wC z1(a8o`ohZ7N_}zV<0=LdSz38-@$$->i&s`&x>Ar+O?fq`uc`b{g`mE!@@jPgZ=gJ5 z?Z6u=&m!JLd3N#U%8N^WOXV5G+bAy}IUST27Vo0GxOg|^rNw(HFE8F(d1di_%BzVF zR9;hju=2X%uPbjLK0ug=TzsPPmf};Cw-KMFyo2~m-O9-kAPKWuW_h2QR`L4P&) z1>oF%mx41+e;z~e^Y^BQpy%&Oo#6EG$GP(1?^6Tg-Ch(wIqSvv**^QCUKgU=qrk5Q zXFT5kXM1*nv%ar^(`QeMUt`Zy_vYJwAJpr^i01%s`hNtR?O6uS_9+B!f&Yod70=0t zXDal=p|@#M)c*AOU`l;UQ~2~0&T&{VO&b&okAVIi_+9u=aJF-C3a8H^)N35{`+=Vb z&VKb7aJGLdINLv;a_6F6yQvsMOe~q!eUPIAt>_7A1!~R?Zehu2;DDdUrwZ_%X+tHr&;QDUp-(s*3oa^OE@V#7P z`1r3k9=6Ztp#KZX{X&XVE@&wzFR^(sMgK82anbo@W~m z+jAB;+tY7%VrHBS{XS=aI z*>BmNzTM={_VoQ${?tG3mX*ZWp1+T1%-Nm?g5QkxoMc?(vVG10XFHz{t~|b-F9Ltv zec{{F_uH_2J_$YB)A!p@f0OCO*`DmTY@a*e&-VN(eAsTsg0DjR_;FQr{V&wZ_aDW> z{mT{RBR$*mM(`c*`KNfKOWcT#I;E-`i98cfeWS?->v4%l7%-Twji# zT)#X|qPFw>e<|9N{ok)IX}Ny6U*LQ@ZNI>IKG*vXtz2yvT)#g-JnYZ@cYo>sxqjnu z?4Rqmf8#m(^WWQe^}lWV{oht!o*!;=^WH%=-tl;W^O*_uy~aJBXZTnO-&OwpcqA;h zCZ$|o5A84RN4*X;z4$jB_w%Ch;A{tfyc3q|=VKw~{EF?y;~KV`{frdNlNsj`h=*|= z2hKPvjfe60{b|UrOVQr}&iFY$Wc)`$|GC|}+jFdOwe!Q6k4*&EcY~~>odv$P3)Zif z^NcHgo^MB z#CZzzT#u`bOV9Xu+`;&th7Wl?+LQHaO5rzvv%X&e=X%)#aSnF%+SiuLz!m?SHtN4@@KpG>$^h!IDFV{ zzXnfhw|$-2-WGS6efs+Tv)y_gM^sq*sQv4(ea!^F8RIR_zj3^63fkF^w=2Lu;0p2M z43DR{oqiGJ^7oxb;jr979R%#_>nT>`LO?jyV5eJFkz_@xF-L z(SzU$!EZ-?eY^54Lp+-?KzwOt&j!dwb{CZ=$Iy`S`4 zzt@{yAKZ?<3eNudHTbiCejA+I-NPyT@f7}a3V$wzzmUT9n~Rd_%kAz%Dcc2)r?_4C z{v5X3V61m;7l(i=1ixL30YAW*`R&3kV~yhEc5w>&1N$4tZEhFmLeK5u5^(x7gLAvM z-ne4tcJUeL>3=6U{oCOqFTY*<4tnD>;2u< zfAlrCm%->)?EeR+@FP?B$P|8T3ZIn1&j)A!zYU!G1%Di^`trIgzh6*&_43yd`QP27 zKON)nLvC3~{0wk^-dLRN!~H@9^uLmcOVXbS?tga^XFvI?#4d@mULTHV%+sz@;_=AI z(DVGcKOUF=jfm$f(6gQI2hS&-GU!?Eso*Sk4LHla4?Lf8$3g%1&<_8v;@J=FzKN_V*a7p#z_0@hn zl$~CFepT)MR`T56*KlKud$s3t;M^`=0Oxb1{B_0h=Y0@ISU>UQ`uiY`1J^w!etY!S z39DWl=Vzh6jl=$BE;!dO=XH!T?L6LnDL&r?=l+7@Fx#K!|7T*ny4%{#x5KOGLGw;db#;=($~NhMwES3(#}B@XsqyyRqN?6?$$LyW9HG2e%9MXKoh8 zaXL7+iw{KZu|MZC<=}j7M07@av6-@%!^#isv}!?}X3s;CH9^d>i@`pnnv+ z4E$%{6T!ED>v+)b2VVw15qvxNB=FrZZcGOE^9|Lv9Gv4Y+nL9qCqd8SO`cDv#W+LG zc?h>V|GR+J3-$b6fckq<{L_9fKGfPL^e;}~`=xOD`~>p~&L^J&|D^e-oq2urN^suq z$iUifBoj` ztgs%kRPUo$n|9_iHisx3{1#ax34juidd7vH$q< zqVhQe`u$V%!@${pijB+XQ220O$8t|i@i`kle|7sxAHP4|QGe$7mf7%OziosM`|VBO zZ0FB{vz>X}7u(q%*GPL9>g(r?ij(zy5dOoUf5dpG{|PwT*nrd%3-S2ta>H`J1s|># zKhCQ;)V4kzj`LhE??it%9(sRYp~|KHK=dode<*wyKkpx;egb?Lzdw(y_;rnzkAFV= zj{{!_AI9mA2g7#b_Rcsz4Hmn z+D*q?zTMs_;8M6A-w#fIZr6;5+b{JzFTr@Gn7=-baE1GLv`&@6_40A>-(!BY0G#Ds z3eI`sb;k8^tb6n2ehPZ77oI<%zrXHI+1L(WhY$4|z}XHzHLj2G?#;*ZEcA@$x8U^u zvvGYe9_`DN!uA~C_Mx6Lo(~vTwo>=z<2ev|#`9rt#^bLi3FFbZ1z#@p{GE>Rd>ru{ ziGDH%K8$A}IQ_4N58LPZ6#Xi2#?uC$GPKXPp=UgggEO8@@L@d9r|5qN&UpS0d~|J| zUtjOl3U?`7@5g}CXDT@3oM}8%i&12%OvFjo{pme*v8P>o?+R^{SWQ=$J{z zlI_sxPsK0ZWPG4~dcMS#2L;@pUnmTCvn>w}_;OpepC`M@_1Aw74fI28yeAoRM@BI?Y2B4;2UjuX274Y{igmX`(mRaT!9`Nn9ydvN`YU-){Zwec+sj9|X>M_;}+3+$YB?{;ogalQy2j{ko|xs2bh2l;SZ_2Y-O3(kj+vGx|{e0Y>``LJG-z*+8D z@L`-EOVQVWGtR~E;e7a$&@-M-fis@l;lp^ooT6V3&UpMhT>EJpTAPT#vs^ ziRV91F5}+;&UgkY5SR49`Ec4i{DY=fJe&`I1f1oL1LywN|IVVXIUha)dbR_PyXk+i z>Gi?&vJgJhH-obsJ_jGphrbLx<4K!ue-A#4=P~#&o(^!vBH&fVR|dSscuT0RJ#KZB>&)c;b za{m7;^jlr!e4PHgxAdI<^LcvIA7 zZGXRm;^h4QG1QCg_AEHpqyIfCY`1?;(ewH}w%a>p;F3N#|9`J>tuMxNAUNYW6h2&! zY4dQ^T}l3oC+qoeUf0C=|9to}&c)!|@Bj0Bc>Mne{PTQx+zwgKhkxDn8|q$V?#+*r z_ZttlqmAI~pU=XF+tKC}{Y&87j?&JD>;F1Y(g({;J0E^ZivC>VsxRaGc#7WdpY=84 z+*Rkp{qOb7n{9bez?a){VZi-7W^lm$JZ4D1 z{XAx9z=zp5UKH>amzG%gY1)rY)}sxIe$WGT;NOzqJJ1pWj{; z@Ij_u9q>ZqYXa`ihkx4m0QdQO_vXh{-p~F3IPY8k7Op4R%gT`tudA#8r~fkJ8V4?S zZ@%2CpyzWr{Crz_z5MUq_|1vp-KBw)4lZ|7D!bu8vA!J6~%&Z09e6vz^z1vppXIXSqKBXL~*YPXCS+ z{wr{{^Y6gf&i;3$uzg;Rn<46lyl$V@Tk?5>{`x5SaC^KN+oPUI;IMDDRa z+vo3XJp4zA^Dt{qt%mvTez!rk?C*;g=l_pZ0lmK4;PNQ>>(aH}`5XywVZ>=zjn>{rx;waq1kZ_wm2msy*p5KE-DS;*r;@cf{aa=(+vw!FsuM=*vyJ z-@#UMv|bwBg6}8(_j<)S4?b!7_oH0u4*}=6k>>Mum-~;h{jRlk(>mA7@5ld$_0Dx=FDE&-SHHRnaVevJDIJrhhxAKYII1Lt^t6gbE8G2o165;*rSr-E}o@{h8< zj)+<wn0)l|>+5;wxxRe6N&6wh$^A0d*BkKpi_7Hem3AJC z?YtlQCx5TudOz6Ki{jyWAB*)xy}v$6>zC_&4)k2VO%}iOze9b$pThlpm(t&k_TN=L zcOp*q2R>(jgCUqs2HwyZl{dr5%_RC^yj4% zr(RoZBKeBxqxjw5t87BS`{wlBhQnjwyU{)zpY8GYk@r_z{MIZ5>_6hZfBN~JbS3DA z{3Ke9A>v^>Ty0!Fce!%?|D*j(3irgy=a)$R|MCYfFz+E3YH!Fk~N(?6g5ZsUrF^NJ1N-0nKTssC?q zZjWCwt`EJ|*uYui{#H`CH=rFZiD;~q-uJ63z%O@y`+jvDxb(hX`SX7AXTRe48TPCD z;lqCQpmF)IU-|LG*UR@So|j<1^5-Mv!+uqi(tny#xIZtUa@h}`ho1fCSH@K?`yi7f*~Y!z`*2<=fA5oa9{b1ef88~nANPJ0 z_ZpP~L-)2m)Q z-fx5t=Rf}UEPbt)pa0wnz5IRqf5Eu?x!rvWob~;xGP@M6-*#|rcfSVb_Tqn^ln=K% ze;u_r^*Xnyqz`UiCxCN1oeoZ)Pk?iKTnx_b@kVgA!)L5sY9_t>_V|yoAD`l4R`T(W zcu%}s9e?!Vt;W?HJbvW)c6oUpJ|~3yL~Ji@*iQX<<}jXTQSO(Z9|q3-_0PbcgZ^D8 zcMUkthjaZ-gr5E9ba3kZ@lF{32#ZJjS15N9;!Hc=^=s(=dA=*Yu8iklI1cc9RMzud zFQA=yzU#ZLv-^44WmsSAZ_BZMA9Q+uzUvFn^L*FC(DQuPqu}Z*{(P4|PbkLoUH-Yy z;ymB=g88^mdYt#*`3j!z^5-i;J%6|2`L1`O|MUEn|J_RQ@O+m)FCl;G%i+WE{~U0x z-w&f++>ieVoa6t$8Taw{`@yzCzYXi%&qEX^w|D-|&NzAAkL7ZHqIU4*9*cUhT#kn< zm)BR5H^YbfsWsqiH~Sec+HW#W&U46Lgb(+RZ-O%(KhIISF&=+CbI5hAyOKELtcE{* zHm2~j{@{eOcL6x{Yr(1iJ~;c&55d_EKLMvdufu0Q`Og&n`%?N< zT0i;cxDoG9|F?}ByXyCjf5iFoUIV-5Ge={5)gZm{k%Gi{}61~jFa!uJzC1GX?9>AJ@p|Sj6)( zeE1yf*HV1`0{utf*L_V z-_6T0E*%XY_FFxZL`ffd`TnVE#g!C4``a1NACGd+0q5__8tatg!~Rwaz0T$OcHnbh z_?++t_%QxY!bgAl`1${7GXBp)uT#1Hd^mr{=kFJ5Q}q5mFn!JE)%)}3;_{zj`8U{S z*q)CW*T=b7Uq1%d__k8TrOLY`J3d!`KX5*ue<(QP;s1xr^;iP^UtGHlib`|qBH)G#{QpBLZ|Qx1n;Pif zYZ>YT?)9HEuJ+-1gT>&C)87xPa&=y);dCp&J~XTxrZ0meeym%Mg~r{VQ4$~T7mVpc zd_s!;qtJUl>5l`Khf=O`kI$(0_e{mk@p~@+6I1-t>NOd9)@vfTFI(kKaop>?MEoSb z;Qsc%tBOwocZ*RHPm5=&;&x7p=Tzu-CZ5ya!+8Av0qA4Vr{YYD=M4Dl zOgv}8hw)T^`0>x&y{<&LtXJCh$a?v#ivKFV;QrnjpKErJ&$TH&S=amZyU54i zldg5b_L&KPeW#SGAASmY`rHT}yX5w{33~dh1kcCkGtlSblQurw44-_;{T%cx_p{*i zNh|l36n$Dh|2*_8_f~M0o93hYxqPCJ?#~KSuKu9wWPD2V@uA6w`*-SpqJuL_9LJsl zFS76DbDKAHfBQeh{j(h;rT<;BIRyeTv+1s894c9K6T`isw#uUdyN9_J{bt zfV13F{DRZ4+(Y5da)*Hz!9Q!cJicJLe?$AQ+;^muyB_soeeVPJRa85i?iYgk?goFB z`%ZAyH*2{(eqnvz1AmsgH#p0^7xiL&zXtBBsQRAe7lQf@gg?vO2YhGBJn|n*? zm-z+vH{1CeXdl-1o8U$8{~S2uTm$ZlQn^?7g`nJTL(g)*1I}_E182D#!P!2SV|-xy zTmfF@Vp39^SAtK8Xv`mne+Bpt!DoX15xfd~6L=l?a+KQu{v7m6z^{Y88T@+i72rRI zPYd{?-~++^|D7aM2(Br9(a|yB`ii(+AX5bW4Txtr_@}^&!R6Ct4`|`~YJz?W^orBR zQ2`#svsVme2E5aFRlpmTsRy|8so?VW@ht(Df0_OM*c|XS<7|KFJ1>j{judlx!&~snkA%TytZ&AQ~eTN6!*S9#}zP|qY5Phw9e0|FT z{m-mkQv%*;-2cw&eJ-?ZZ)TwP^{oncogL5C1>D!SA>h89mjryX#nT*cAODJg`}kV| z?&Dt_a36nbz!zJ8SQl_#ueN~udOZ+uU$22~T`1}6`F_FuT`1_1_&dOdL^S4mfER(E zjN=6_kx!FfaDUVPOBk2v|0p>9C#U!?PVsMr5B(njr~itS@to&jsLwh+r_DDwKKrVu z-D>=T`;Pvon0sk!Y z1HrHM3yu|ne-nDHugAcPp#L2BaPU>&#o)JqbA8GxWa% zUjhCb@D}i2gAWA1&M!Dt2>vGYTwepQy%$0MN$7`zF9RH0`g$C^NSR#HdOr;7ad<>y?(YQ_@}Wsz?-$(PEcY3V=j?muO^V#Ik~rsq!z0?87lV((ytfqm6X0dw-%W{!zrPegpBB%> z@P9kv@y|?FC|qBQQ7+s0QgFt<37qZucE{i1S9TEpLd3)Po4^_WL*W0D@y|+$|6i~@ zGX8dO#(y>9_m=ACRem98pLc`Pe;_#h??ky?BL7u>A@E-hJ^gyQ=?6{EI32e?_@PmO-quTVReU*_c;yx{oqyLgTeW{wSB?;`9sC?0dRkRsJMT&v%dD{{ltAA z6ZiLPi|;RBX*1%nQ|Hk){`oo5ALzyU6tEBbGg{{J1I2yY@qP#Ksz}{^UB8%Kt;Q>~ z;F3OuMt{X`HQ)zFXD4qsm%4nD-r zLyI2)J_7tm@G|h>;4{FF0{7>G<*$3pd|C#*{nQkF)dH?O?UrGEz@vdk--91*T77H+ zKL*_Yf1dLG2>6@O7lRktASHbX_%QI1;JPCa6i`Rn=0@z(ED?+@)-;6 zk4eSHfvSemuDDsZa#WA4aSRXXYYMFj8_G` z%;IYcc)Rh9;96gP-?i{l4JRTlRtx;5E>X0hiv-fBf&^@~?&7|L!e*A^39m=)0o5;xF$4{{-~+ zfva4Yf()&5$7VvuLUjmoj&&hUx&x3w9i&wErUu5462G@7Zwp2z@XTIsH$HArdbC)gP z)4<;Z_s>j_&k#EZQQPR{uZJlOxW698->>iWMb_a~2Kr{>o58P8ftCi@_wu>YL-$z* z-VELZeiisSaCueOLC^Mpci6#AnH@y=_^YfVt^~gp{*4boaQXPT*ADO%(C=mkf%2BV%)T1}uI~!%plU|I{RUPa@HX4<7Jmm1#+u6SDQAgRpOo0wi@hsGIJhWxOYZwYw&;W2*+T;=+{Qfvd1 zycOq$SY9w5T>3S}XMihD>yhynO#$yTz9!(sw!yy|@S+dLKCgqT+`D32Fv0q%%GAqW zr&kUx{W{aPfUh>DkGsGlpO3^}-Ulw9^)W8k4zBk3z45oerGLoy5IZU0d$Dx+asY_uWZ&Bi+d-e!Djz&niZ2>3SRgKXUL^(wT1rYPVQ z#%Bh+-FQpDi|t_XiGa5n-xBa`#>sy>kF&-2kbrj>9}(~(I~biA@DAe* z0rvytih!5d0D3dH*5eRczYl;%{onW_;L`i^aht$Zw-)n%0bF|jysCi*xCNJ_m4Eby z``8;?dVgMTIJoj`Gye$zFSLX2ihvgzuL*dC@nr#TF}^C`9mdxOywDErHwL`H_|xF3 zSDCfv5ZnLwcGy>cxO51(^s`Jq0bJ6mGWX_ERlwWIB3v*RTs}4C(*~~g_sDw?#i&=qiCS{!Ji(=3Y5q0f^7sGW`8;sxzhU|n;A1J^0A2j_F;9vD(_xTLC^v{`o;6bs-$6sta_`SiU|Fh|5fGhsJ2E_R<0GED08M?Ft zT&Vb@2p6mZm(NM&vkqMPR?}|;m)@UW+YB!KHq#IOpj&WBOs|%cwdCfB0dJoY^SXeS zO^x~LfESz^^Q{4IKP~2?ZC>NcEjT0Q%fauBQS`nETzSeW;xAtgc*mJBe>31!(_>y( z6o2}1n~e_(c&qWF!L_~)Rz{bailUFG&D73k*?PGgT>4{7zZzVq?QHkv(j7&5kK11Q zv8LZtB-*`Rnm-mVzfcr^N+$iWrXPGrH(wwB8NH7Nm$c#B_{%8)Z!U(;A&@ojo?~v=}(uLOYPu7t<@1O z7+~{aF}*76q{5Vd`;!4x0WYhKeU=5h)%dD_cN*UTuK4{m(?f>Eemc>L-8+l(Itu6Fa!pK1VCxt#;z{7b>5uacoltH7gp8e-lN z@QO=f{%XKmjTavgfA8ZgYmArc0$#W<=F0+JWV|Kd#m4Unc$x970dHuE{fF7{ijSvt zQOrvN-fnzazzY_~`jr7MzBJ}f1-xoW%>8kaFSptF_CVimyvUB9yuN5@>@zLk&Bm7m zywmu~fEQmD`?LnU+4%hd?=b#Ez>7W^`)mn#gYj(vZ#F*Qs5qamSBvo(0q+TA8 z@f9(DAm9zgp9*-J@y>v^8{Z!A!YgC{fgkD_XOZ!t0WUUQ9Pl#ZlLKC1d}hEKjJE`Q zoAJ8>UeFxJ_f){kjK3W4X5()Lyxq7zF8AxD{i@i1v>mT|-eG)7z&njM2fX;|*k^sf z+l@aJ@SH!Yr3;PNkcm)_hpOW@KU^3DhsJOD0>ww9Pb z0xtbgrhge+{{HvfKY>d>&h!K9e3-oTYQEXMxwI#^^e32p0=WGBJt5`b($6scEbu7) z&$=&Nss)#Rmg(1n%m4e=2vj$x8SG+scuLYO>r>1WQmw)GNvHnSL>3?qe!FGO8TKV5= z{s)0e|0mOzf-6t!8u#YXL~!ZfF#Sq!`F~)b)CC2%fJ;AkK!gk0z~x`@<(NMRF8xr` z4;U4H@8kE+4%ic1dOagpX*js@6y6!(f)a4)PcZ#5aK-cgJx;K|@1DF2m=D!s@TEFj!|VjqvPxD&7~W_rGL}(cY#Y^*e11GZvk&Gz9rxt#$N)Le}RqjgT`thURR2L zv$fB@;L;B;{RnWyQ}qq^=F*gaHyd9b@ZxXA`t<>CHvVmJmFu6GvJG5uzF={_0WSS; zi*vA@r}yizfp}jrAqq(%)(NW#G~JHUDeDrT@O^Tfybu{{7hh z9&qV@X!>p7^7q$^ya6u#QMTV1JU;gG>!tJ2c=;f3=}Sys11|r&2gUk%;L;y&`W4_R zqw}#?zdqo_Ka6=tz}t;K4=(?c%)jW^IG?-~&$AZKQQ*@1>!2osD^JxE?#-psz@^v! z#ig_yT>gjd8R3GPz@=Yl`n$m8-}+>%_rK?e=~eXOm=FDE{ONh|)A91mfEWEV=1T(J zV0?AJ+l@aE@WP+PKAQtxWqi*27sO+HNWixlpBC`We~t53fonZh*m`UNkJihxv3>>kpJNoguLGC9%=F&?SASS# z{b2{V%Dvdi-R=0uF6s-?f6Mek!MDef=>2eT>Az?C8Q_Yic~hL}0&wa5J#ww!isv4S z=N@qBUp4=Y;PP+yH}~e!)8NwkdF+rAqOZHg&!3zBA>h&vw0YwMaQS!qBF%kR&;a;(R5xDdRnSKSh{0p|k`kTR}*Z+yG)DABHvF86Ixb!EOz7zbvWnk$QaOwRs zIEIwP0>u)w=da@BL%^j!*Zik|E1nvQ=S*kC9ac?foD~mq5`r9JYuK}0; zjpn}=T>dSl-vBQE!r!_#mmV*RKDzu@o4#;jH<$kd=D$C<{GT=bXz(che~iZ~B$s^6z}vy}5J?xb%NEeJ8m52fa_~f`V7Tr5|DQ`~fFMUq|gw zuv`4M-iL#$+~!x~?@GYsGunKXfvenOt=wzDrT6#Dw}QXJ@#byr&82(5rT6!CZUdM9 zcg+6{aOwTMOoJ!61()QlSM#5=DOBPb>Q;sI>RChI+}lk~gW@y;}G#k1{osR|0t2A6&h)2{(n zJm*y21<2)O*m zn!XBL{%z(z7hL+Ore6*&|AN2j&CR31r9ad3_k+v-cjo^vxbzp8z5`tTE$06`xb(HA zA9Rvia7kME587Kx1qJ(pOMj{9hl49m#hX&Qc`ms0SDJnWxcp1Z|7LLM*P4DkxcrO$ z=H6WTHn{Znnf_I9`Co1RuY*hf6Vnem*)6yvZ-4ETmiGmh{#nyc2HzXw(rMt*|IYMH z;3}id2D8h-rQc!tR&eP%O@9x#^!~d44)Cabc8i009$flCc3kOifRt9R3e)c~#Vxob zCjDU3j{w(qEv6p>F8xr`&jgpg!}QhQ(hoEJa`1i7o;QI@@BhE=4dDL&@N!=lJPt1X z@#g<3xW5Ka`q#mwKhgBVrs~_c9Tb1zJK~^@2A96d^i|;MZ~pq-x!}?-H+?hs2TJlekYabLQ$+bQv4$Ex7c*H2pGg`M140j{jP4>3?hbjo|YCsrf$*F8y1ke;Hi-}1C_p*UYf3WFifDgs`x&U1IBTc^&TxGPpC(d*Wxb)*q-wCdGj<DPcC2K`!a>8~~Y zCh%dUucz`+`ej}{W9<)p}!Vf`k$Hpe(>SY zKMXGYi>BWUeiZb-0hj)Frr!bX|Bq((b-`{DxukZ`pT9T#Fz^q<|7dXi`3KX_0GC(6 zo^hrN!1d>!O}`3Ut7wDu&o6@O&-V;+Z!X;rF8_wTV*iK1_2)jO-wrPSeFnQXm)-)` zpC2;);4`AHyZV2p{fF=eflEKq^fSQaUuXUofJ=Xh>6^e6e}(PjF9(; zxb%mc{w{F&A8-EmflGgs>7M|XfBQjk{96OwY5X;C`5bLNgQvR%m*k;xCtJA(flFUv z`eJb9>9qfFemuDJ{(izbaQUBN{+EDDKi>RTfXjc|!EwEA2ABRg({BNn{~6~061eoU zP491xmG=bnlRaiQ;F7rXpD_Il@Z+Gr09^X@re6nsJoMiHm;M#gzX^T<^t+$!L@xPw z{C$*V;8FY7PJSx5{HN>{WiMC-uJ&2JZ_K|4F1U=TGJ{Vy0VgNggV9uMcR+ZQtP1U;MrZ7gT^NPq9sE&IOmg$@F)D%YU=^ z-v=)Ji>7}9T>e$Z#Etq4xb**F`hs)af=fRBPwy8m?*T6T|1o_Lc;x?)*ne`sTaBLv zE}wT5#{SE|Rj=<`xz~bAf1v5tfUDfXlDOQp;L;yv`d7i_|El@F4lez1rY}6tEx06a zy*g|szdyM2<)*Izm;cZq?#-on;L=}c`W4`3qMzRkF8zGdZvj_4ZMKtt30(TGnSR9i zZowsK70(QdXAHRX?WV5)SDv!*aZu-iOaFxFTfyajqxs(hF8yy!zY$#io%SDqKMgMZ zf0%yAEVtm2kN;8gKLlKQe|~HNxbjrl;93qY{rJ7zn@cU=ivNK9BV2GBxb)|l{(f-z zx7y(MFu3%yO+Vm**w4p*p84+yF8!sZ9}ccO+iXxQ0hj(t(=P*8{4M5xEx7dGHGM0% z{EJSD*Y7>x(*MBp+rj1k2lIamT>7i`ac?dS`FQ*(Z@mi6jr|V+m;Of6*MrM{%>l|( zP_PJG`mdS31zi4xcB9&D;L?A~^iP4y|Ci?f9Jus9GX1OI^6$JLj{kLV>3?SWVU=#d zC28gV-UGGd=853azi9f&;2)2zBmHUM(*NG{%fTz5zX@FW{ofzi6l?~M;5j&e=@l8Y_p*10$x=W2YU&)d_HbI4}h!PF1B(X0hhks^jpAH zZcBCSza!vn#&@fBBA29Dr&zOEP zxbl=)P;~)sHNG<71sBHg+yXBD=gof$xZ>G+sC#qiC2;BAJvhQ$4`+FYThyziF7_Wb zC;r~^ZN{erykc&wKNDR3?=%0^;ELyBi{}n->5nk|25^;Kb#d(98Spma18SVeB_C%& zeXQRTT>i(H{|s=&bBD!q0l4(DOuqzNWi-!^{nrG%!+1NmA(zYj4hSy)8uKrxjlPcJ zUl3bIU=MKV7n{BeyaD>D;L@)!eKYta(BA+q{q3f22UmTIET|{JrC)FQ!VBGkOVX-6 z|7z{IKe+T`?YLkx_(H^U9JuuUJVO(B6ZDsZOJ8CB8^IM*%c3~b%ixCGx9)fXTt3Up zr}U!e>#ly)VVPzHyl`>sUkfgub>_1MTj6Q|L%2hIr5Nxi|L1g>$}3GvH#)V(r-0=4Y>T@`$6~S(mZhK-(|-~E5OY<(zk>A zd&>32li>34$8m3hD^CCaQtduhxw`i|`&hXXz!m2?7H2uQ{EssIEO7bz|5vLPT>28z zuK}0;8uMQZF8vhKZvekCZesVXTMytWx8RES%a_3AQ(-2qW#d3@5wH*4R zz@`71>FdC+h5iz7>A!CJ2f$U|_U1U#Qvu&*d`G}rtnqfMcbQ$1hx~tP{?owKKFh3q z&IXr$u^s<5fM1XJmx4>b!t`z6D!XGvoM|KY4e)syTs~hkpF#87f=lwytJ8dnz&{0_ zqrm0!P4lS&m(MoyX#&3qKJDP227eM<{!f^H;e5B?l8>{%Dz`tl^!|A<%fP2O-csb= zT)Gxq`hDzpwiR4uwB8s8bq~1o2bg|4xct`@xi^>I0++tT^g|XzUw6e{WsQ0Wxb)*q zUk@(-_M$ldB5>&|Oy2^o_>1g88@GW=@1KLS6%gP_WAT3jT>7U>zXM$HZ!2Q!}H9OwQE-GWPE(r++* z1-Se-9p>I#Iu~5}=S<%KF0W==IZMH%|BdN4g3G^jn0s^SX>jScn|>>}{3~oFzZvib z<3pO{);-R&8lMpGmM_NbP!;gzFUPzk;4OE=d_%yu8Q%h~dR<`k+72GI|DCbVTi~ki zn^xb+ixho#KU`@(r-4g6}Vq~8GkHRwCQ*Mq+bu68K4FJA{&oc{TQLobbr=^9TSvUWHeT>7ED9l+(^ZvGR& zr5|ScW^k>?PV>J3T>6owzYARcZTH2MyANFYV@gh1>E2v=3tam9Oh05v^mSBU z`FDOJ_CEw%`fr=wKUYKAs2`gD+(7?^>6e2mPvQNs|4rcX-_4FsH-O9k%;E0MrN_ag zUupVIaQPQK5c|IZF8wX0_s{e2@h>^bed*FsOXE**>DQXR3|!w8KN$N@1(*Il)3<;t z{_mUrZQ#=T=U&|p{@vKxee2R?@rTOPtML2rmqp-K)kt_0xcrCM@n!?Kg&yfQfIozC z9|xDu1oPPr{ypg50+;@D(+~S(R7@262I!9lmwvYCXMwA}4OZV;aOpp3`ZeHc=Y2lx z-dtJ>F8xiW-vA!9=MUnb9tW5H7Sq29F8@Q#|8;QbzhwG>%iMxXetor>|K8xzf7SG* z;PUs+^_U1Q{WncN16*Ykwa4*a051JQre6*&|Ctv5P2kc$YWi02N3gzL1y{K(R_^QI z^7*0pjJVt_xFoI0z0k@X11|lurk@7>7|LA@z7c#Ycofg0@s|UxaHcMa>D6jxdxERn zUs|~{z!m4GEY1tSrGLxxOTgv7?eVzWtH7n-{e$k!rKiB<|ET#t2QK}Qrr!oG|Ar@H z|2M#;|A^@)U+ETHl2-n2ng40v(w}eoI&kIbcq;b41YG(#rf&n6|M(H^&7}vyrEfO< zCUCQk^e=!*ztZ$&&C%Cg>#O0XaXd4?4MoBWz~%ED^JxcHy_zl4Ch(ud*6v%k-CPxY zMCEpX*MrNa#e5cltK27jx!`J_TdjSb1eg9lO}`af{;kjM=HA_Y;Ogk3s~svf#e8pY z`TW&>xct9t{`Y}Pf4AwM0Dp($ zMK8qu&wxw+b<+>H#x1xct^8*lqa}B|1}^>BB2jlg7r64YZ;ky+z@#e*ynN*T#PG(5u<>6#*}NInH!0xZ-)D$i2DbpL-+^t(S8?BI=GW0{u~k z#e5^U^0d4e`#%jX|Iwx&a$TIy`_CN}FCPLfeU0fSfGbb&-(vrAaOs;&Uk|SM|HJ$j zflGhA=~sZuzbI-w_q-x-=|5xoE#UH>FxtJj^b)xAD~3hb6%>EU`?qoE5vT#Tt{m|; zaOG(psCPHsg3JF_^B=Gx`nqd7nmIOJ-Vfus@JA*?#-o_z@@*}^aVFYUq|av1k{KMh=Y+CCWjpA9bkp{8#Km;cc5?#-nq!KE)V{Z?=}7Z=6;uYpVN z&u@%g=@wj)O8&FW|2S~zziR$7!Ih`#@Yuf^T>5`8{W|bzj{n8{zX2}&bEba^T+SWC zWB=#CrGLTngKu&RE=eW-j~}ZgcU?KS^gB#n3a&iuABz1af=gd;q~6?lWpMf5ZvIz+ zOTVY-SA%cIc6SH3^g~Qv_-VJ`lA_S7>ceq769QiRk(kc{{|o$U!B2NS_2%CO9{HQk zn*sL^2rm4L%j}Z0JK(=RxcoPo{|a#BDY6F*Zvt1lwOhMw2baFn9yC0##VxobrdPp7 zqxXWn!By^%;ri0`UvT;V*!<4~m%hUEb>MO?JTCTM9`Iu0H-XD%wfSrUmqWYhUjUc> zF4Gs@>=s;-RABQX{=~tV6E4ZAS?E%@ZflJ?N`VqId1(&3i|Ch{v47l{)G<^kl6#p4<{O5v8|B&fd zgUf%L`QHI9y?;LM25>o7*ni;nIJoqi%zyZ;ZowrV|B1)P%O&8_|Ci~ffh$khS#kVl zgG>K6)3<^ve*fH@d%&eX_(Sf^rH$Z`zddOCX>jR}H2sjzN7=gK|GmY32)OhMJ{;>N zfXlz?f;j$iaOp2K{Yr4f|A{j9=F%)Q5^(8XH~lhj`42wPy}5KPxb$}%9pQpja5-;V5c}T)F8w{G z-vTcGubTf$;L<;0`ZvMl+;&Oqzx!=&!6hw8|D@?Fz~%pQ^FJ3{`u{e46S%y}nqvRU z!KHu4G49Q!HgNeDO^R^AgW%F1VEPX5$a!(>|2(+#hnjxa?XjO!@~<%eqrs)0Wcn%K z%2RY%?0+V>^rxDB4Y>SoH~+QZ($|~59bC>0SH%8Lf=l0I`oUjt3oc0||E=bK5V-Us zi`|<`rQpg_c4O>65nTF@ntmm?{Lh-=-dwr`T>1k`B3#f0F6WAt*#ALr=?^pgfHiSG zspNm%)OdMMaOod4{c!Ne|JK;Q1YG(bn|>L%{QqG7*MdtwYovQ~$v?MMu6nhviT&>h z^fjj60xtiLpW@zJdI?||Lfq=A7=WpFDX}d|ExJRUY-gr z{bbYEfFBTBM;YdUOFzx@_k$k@{lnnW*O`96mm|Aq-Adl^K%8k$aOszuekQou=i3&4 zHMsOYGW{}eIX6EN`(Fz#{m)F_0WSaB_2$y^;L>-Reml6FE1rn`-vXEZWz$b-bqg*@ zCF@_B|Cz0B!6k9&-!ocEZX9ZjKDyec@Lyy9Mc~r!WBPV*SzmRUdvoc@*65?l|9sPL z1($QhbFu$x;PRhi`Vn`y1(&3f|7+$y23-2Zrmp~3p5~v&{^x>Ae}(B+gUkN_ed*F2 z;6gW>egn9i+x{)~e;izT|6Je!ce(|aq>}&1=D#Pn(0cP94t|(2St;r`)q2AKkNKojkWdF$28S0X(~9TrrO<5a?I?73kxD}Oyzl} zpE|v1%$%mB4YgC}l$X{lsJwJ;P3`>hIVPA~TVLB$JEN|#wz_88f;rXo=Tz4(s_o7_ zuBmom)7<$Njh^8?OG;w-^xFChE6W$BsK!jMZCccj^!0d|OkXs&skUU?S&Qa7-PsLY zD0haD#V*5)+Umy13odn^W|Nesq@;ZQ;<=3r=Fh90-=tX1PK>38tkgRv8je$W<%^x& zw7CnLYUkHBmW(~4JBaB`)s0Q%XPtWb^vdoEmiKO)k_4a8@F|~PlZVU5k>&FmnwIts zsWi5#Xk2hnWA!`)ReJXPxlNJ2cT8z+Ba36VsZF(w)lG93%un>2o59f46zgSSv|bWT zGkA_n@a$^E{#3hP>ou(nOUA@)IH`JJEoz#xkED8)SV!sZYp%~OY??a%!UYLkE!D>Q zZH4QxXVorTRB!#ZB-*?|^Ir+$k#Kd3lx2o$og8`PKC!$5k}eHZ?8v!$jOMDjK8jOZqje$Ows-aVdG z+pwU~4W5%nCe0VSsz0jKJSu7%;~93pY(|crylCFMrKeRl&8dsWWqx_PRC{JzU ziEaimRTI>vag~*GmMkeLDH%Dtdg0tTmF^J2P41`8neOKHbLy%aE1Mdt=Qb^LhYHiH z-J44#V^6Manq0eZPUGC!wT)BfHPlZ%efq@8l9K2^p<+S(+&N1fDXtt}eu)(~b^5r< z^73i3io(Im%22(Xt=!n$YvygJ+}Paf4#&q+r#FpVTsx;} zL1WzOXEeG#98JSrt4<%~I)3>`KXyc$$dm>3HMNZ=RV&NVKDStwRN*$9Q66q9Skm5e&A`r_KtYcGw1(0(RU2s_nF z`zn0bRKI5{7x${7FQvzsn#t+9u9cBvhnY|A)NLY<%z5wf^YQY-NX{up9!5Dgy?pZL zIzY^4g}8&r-or&61@~*?&9znK6>N_YW2d&Ge2N=6_T&W%E~>AM2j98%iyCXom&~bc z&`Gz1p~r6&-JLyG{^oOHqNLV<#tgQHdL0E z#M993k}qs1uAEcf;Jz%WoaRoJPp>SAgX=lb9_t#fwt8OqVohk>hwKN$n&ppiv;2I<=AQd6mg^3e z6Am1DMxMtGa^#p(7A}~dcmgq>_(qPNIj_FoxqFWP{n}=81Ub&1OxV@NU3<=55r6tR z+R6CSjl1H{vG(%GoulidXYZ<2rX5+1)!bE^o@?W6w$CtG$q{>3W9%Bcl%~jHp1$Hz z%(Jy~x_wtu>~h0hUHwth-D%F+nu_YB^$V(N!ZVls8f?nT$GOv*O^pkdmb+6n#g!%F zdX%BFukJV6Xdl!V&Bfh9JSTTE&OWBq{oVPG^e0;TamIGBTZt3hu6e=igoB2^_mH#A z$NROuOTxzOV?y3zimApejT$#wq?tCXtP$pFhJ@3_{jEcWZMjzscJ0BTYB086Yav%t zr5>B)vlHp(mi~5Hr;qokyOaJkPh1erQWgY8jnt8P zaoWLF$(V@?7uGiFG)sJ}UovW9LqqNS8p|GEisjAx_^qq#QqBO6^b=`~xMNSMo?BmA zlYUM!xZozoTI_1-(vzHJg*#6l)vP}a9gH|`b1Ysof9@rVYAYL>^m9f(j)s~_M%TnY zlvdV6ml9?;Ix3wWomJ7frWp&|-})tTZh3is;yCNn8EGrJtNlun%B$a1k(Xra=LQn zENM*C2yP?B3iDU+YHaZXSy#vH&X9+1&yJ9XuMIspCZyxy?bL0a{=$Qjk<(oZ)i!;s z(Ot{iIC{DpHly(}`vB72XLE+?rqt0`@wUW}vsL>nxn#_w`UMMXCoPyi-~BA?b|-nS z*Zx>D)>C`+l<*)reb`AIsoeDj#s1h~#)5Kp6p*}%{)Y;8^<~HCtJEwr%%GZYV@d8h zp!oWk(`zq^uBMI~He-p|jsSM9cG=3>HTByioi$^d_OHxcQ{R40_)GFDz4zGA*ASY| z9JJ3NE1#b{6HNM9ww0D`-__@3f$@OX=YBt-8u?rf++#e;Yc1t<33iS-UqYaHUIUyw z^yd?Fo&~tgHQUPT^PY;GSb2SVXO1@4CBHinXfE5VF{aiw4tKkv~bX~JQ#g+88 zyouxb8R*24a6`?}ug9F^e$&(4$`uRT&1=)jr(USFSJ`WzarY$5nLfI5My0!wBi|0) zAMcc&+;w87q?f5%FMS2v({y@M?Ir1_9cSk{#^^rtSfPvAdiuHztLMpK-A^MboPn*EW{B9KFs3k4(N&CNS^UoheDhjZG`gU$Q^f4Uz5?bHXs%yM8^c1I_bV z{Orcv!*_HOO~O?{=9#14kDOk&=)w!@YtO2le^IUKw>bJ8daPTnSun4B?%ay*Qe3CE zE10?`BX5&+-$zjW3*7b891)jByNOBeSAKVy=cENS?ze@hb*@Qf=;ywCxAvSSwx#qt zh+s?W-Sd)4ul7~wXX#;n|4UYWrMul=+<^ToJrk>)?TtzqGEIxgFW#vWl7e)8Gx!d06FKC=sU0Nf_A-GO>*Y~{SK)Sa9JUl}~-rE~M?+%&t zqkYBB9r>kiYa_=^s;hNBY}V*0LvyMZHqBTtaZb}BcmKDZpA=o&*JD7x;(A_TW<|*!qfbPi|*H5qJ`TGgjjVxX5n)E9jDxJqI zw9#GXXEaW7d-taJwpKstg(uJ6p0a{*a(Yu~ejYB6p6eap|bybWOD1)=^<`rF&qQ`)$0$ z?aQZ6s&uGl%^fPwRdaX!WUuw%59s=}HmtQ1=MvGJFprspTcdi)fuBiq_5I$PXsK($ zg|)cL&mA!@JY#DPC2=G2xUL53(KLNET~g2LwGm{UlH_@2 zt-lkgV5946x{z-)dMZvZKM6|e)i9&ROmXMq>br06UO09BX|+vt3u>lbIDJt=^hhDy zkWv|48?1Yc-8|6k7fy4BtS7mX1dDardRGq$EHYw0}gzuXBT_tQ-D%W+9C@9W#B_bfK&PpUdZ zo99kNsnF8ILfsFsjqYi-w%JADS2s3RyJsf2hwLU^ty?lOI#{fkQd{p%(sggou=Pgd-23ui1MA@;6@$Y`ZgB&oaJ{+cGl*VVS; zyMEZozp;Ae$>m-$w#(igJeYqe$$4{?min~A{0q%#kx+Kuk8kX2CXkmyLdjigaOCJI z)eGH&1W$4g0jsy^Ts$|;Q0<%^38lw}k$u&zOO@b&pPl-$=_yU{Dk<%{*SG80YJFBd zEmM+z@Bi7MZ~Npt3GQhR^Y62WTp1I};e+R+!?)CdriU`YY1GL0F4dFVBP^rq6}qk} z^-oUjGxq!}63XuG_v3m$bg=uWseSdS{B3f@ko4fgKC9kUbXx9QCFb?q>ik2<+b(BJ z?vADCS=xO(2RlPp860y(R?_39{rt=CoiAr8z3;plSv+yJ`~A$FeB+I@83M>+nK8DW zH}~#TOuel##kytpz&gNaeUX5 zJ3~>4d2^N)UV4?Gu%xUx%j$VKS%#8&XUthnk86MO{iUcB*Z5>V$k~-e?((|jdem}; zwa}kB_EmKLb?yEYBJBeFl3ln8`(N6wtWl2tp`gF(t?!EUQRuF$U(X+l^PcPP)bm=^ zaQW9E-_axfZ&vI-0qAE%c41lPB>mEq`*)u3l$EX&M&e_W@#->^Xle%4C%D_m?bAJ*T*N z&J6oH*y?`(JAKsfb{5^|QAEzZ*Po->yh}`YN@UL&Z-%MCcy}r5IWzPWR(G-5u6@k1 z{_n@Jm1ARfcSY;Ci{n3Y?5z8&S*EF5kGl2onC@J2+|kMZXJY9tu3N4UQXejzrH(xw zMXt58t838DL!cgY$nrnbs16g8*FtdGv10Pf6U#Ed|}TM z`e{D__ZW22vv=(RbNwG*y>`RB{M?;m@qf$Zo-G<~I6cLc7cE&*=`K2T|0hg!y}Qq> za&d9NF>@Boo9AvjD>!EUf~MMIPCotYqun*Fb1t@JcZd8j4R$-Znb+1;UZ{J%3XZv` zae=$^b(f^3s|yPDPH-wSHqbtQ`p$xaO9m7axPMXdpK1B0n2z}yGvu#G$iFZ{{+S8+ zn=<6DO31$`L;kvi{EIW>_p6ufcWH+FOA^Xok|BR{LjI*0@~=q9e_4k7EeZKQnIZq` zg#61gk{%`ks*IuLjEf=%8>twg#1@$$lsBW|C$W> zHz(v@o*{o{LjG$r9WUKQlxAtqJ+h%8-9YLjLI)@(*(JO(nMfj12jU67rv&A^+%v{O4rIKP4gm$1>!f zW%)V&4BkEe^DlJ?`S;I|zbPUAff@2QC*&WRA^*yR{0C*ozuNM%|IEzL{_7L+pPM0n zdqVu@Wyt?jLjD^w)PHkA{#6!xSN_}2 z;Dr2j8S)n;|A>VAA9u`f*Jsn!$>(oN6Y^i3p?uBt!}hy2Lw@b6!u*wv8SeT_ zi(h>u%wLrue_cZU&t-^T=ZeGf*JQ}woRI&{4Ea|k&sV+A+gjpK1MndqV!%8S)QwV|}>( zAI%WI<{DxC$1>zEO31%4L;ev7`5(`azceBL4>RPSoREK0hWr%?`Jc;>e^x^NpJ&Kl zmymx>hW^u(kpCAM%5P4{|H};dS0?0tAw&Mv3Hg7OA^%+o`D-$?Ut2={+6?(OB;>y^ zL;fcc^8YbI{Wm4#-|gM`k6)b$`QMQt|Emf4-QhAD$uq%!K?GW!QdntPrk$%_-f# zDEZH{{dYq`{<#_QFH6Y(i46HyB;>z1L;h6>`A27H|5nS-`Okz5`R`B2e|(1gPbB0o z%aDIdLj6z7kpJa`{F5@|-=2_vN{0LePOHS@-}(&ee^5gHQ!|vWu`(=wT88|?EI<3t zybSS|Cgh)=A-`f(V)+X))Z2xN=a~4tZpK0SqeM0{0Gvr^Akbgyn{L2&a-;g1H zOG5q|Gvr^BkYAp@-TY@-`>jjJe_Mw9_b254QilBP3HiUAA^%ee`PXL1zd0fQ-5K(4 zO~`*whWy(S^52^w|CpYQj1&Y5#&W@iDv&VfG^@b5bC z)qwxVfgb|+q641*{C5ug*?|AA178RDpB(rZfZtWzruRE~&Fz2EfbZ(S-w61K1K$Yv zDhGZ!;QKl7IpS&M$ev;2-3`SL~#Yljvbe^JlOFA0gg9{=aqL_XU2rPt@~Puetf# z8~9Il;A6l))Pb)C{!<+IA;5pC13w)2PjldFfq$3-p9KEl4*Vs+Kf-~Z0sJE!_%!g3 za^M?)Up^=6d8^ml{JjJCM?3KM0RQO@d=v1Gao}^nKh}X?1^j0?@Gk@ZI0wD}{AW7w zt-xRFz<&<>;~n@-z<-tl-wyl}9C&YM_59)A|I1@aJ@56JoBy4O7f5N5$1f8d_-?>| zjsqVB{&OApD&S8#@cn`RJO_Rt@K18!Yk>cJ2R;G(lO6c8f&T&relqZ1=)k9d{~`yz z9{A-sk)HQ@&CUM>z<;p=eQoOKkdNJ z0RDLn{2buF)`4#T{`n4k2KW~^@b>`!LI-|1@L%V^=Yaou2fi8j8yxtTfq#(${|4~i z;J~*6|6&Ke2>kLjRlVQWYi|F)3HWbv;C}%An;m%l#;rg)_W!py@D+68<3In&IPl#F z^!smh;P(ao+Z^~R;J@90j{*N34*WpiU*f;16(k|0D-^ z`I$8B)oaeb3h-M5q&dCj_!hu-ckr(Td?$zci-7Op;NJxJ&JO-|!1r?SZ{J1j_vv9u z?|;m4m_HG~=N$a|0$zS5OOLx=bK_qH_-!2aKm7qe(V_owz$YE};ebENfv*Mp^A7!+ z4ES*lkj{&RbW{ZD7Wk8$u<0{#pK zzBk}kI?VqV;Gc2e2Lisg!~CrQy!=eN9(TRw#(yl}_jKTsfbZ(SUjq0a9LBF6@ZUS| z3jqHg2R;M%HDLUsVl$Cn^&whQwq%KarO z;^q5igM>(If~BRB)_ufU`svqw=~mCX;>&Wc{sDb0iN5L`DlW;#H2E~~`g<@m5Y-oG zeWX~I>Nj+nS5<6<%=%Af_zd~Y?^ZPV%NRaKJiQFv5y0e^Fnpf)u>4Oje8DpR7YyHK z$?q+ikNO|kpaw)dWtS~x{c(nmTJlpEK4!`Pjp5^#d^^J@Ecv0LP2wTE9gX>$wB+w% z_>?8Tk>S&p{0U;iMfo$9{0$7BwdCJr_?#ubpV;}K{CP`0#qb47{t1RJTJpa#e48bI zs@OnL{oYqS%!~T@;@?s)RG@0p7>Dym?eKN!^bW8%?zKgLxL{ITKy0p%}R^2->$ z&63~D@ZQ&U+y6N6J_*VnvE-LBeAJTvl;LBR{669ZI+Q<7ygWAbFXr*frwpI4vW@HtEVL59y;@}Dt$!IIx! zoM52(iBTr4)|vS{{qIJBtM-7YrSXs=Q93A^6NTf{Z|A3*Ni`9>HmW9 z=YW4M@bA6{?tj|S-$n4K|1H2j5BL*|KV#`1#`ufCKOgvSV*FW4e*@!h2mXb?{~qJd zS^C#9{zxaa{rTtL^}v6i_yuQibKv|jZ|UDp@M!$2fPWG2Ph$K9OaDa19|!)$!2d_a zU$pe!$M|c3|0dx7fbq9k`rl>zDd4{a_!Hgn_{w(?Z&p)>V|F4WcM*f4!>|S91|1;w+kiUj_x&L1R`~&t>{Xfd^oI(DS zI6m?(;vq_lUXLVRoJN){ul%1Hzq?14-Rv1p)846qFO6UM-Mq>Qwf|^YtbQQ#H-h|= z$ZtMw@-zX6?&Hp5ka{H6t$!{LN|HAl-&eHz@ z<8KFk`8O5J@jq@q+<$Mr>i@|h_4gM%>VM=eHUIqMFW+l1{aMDJu=Fou{Bhua0{DMo z{8{o32&w-E#-Ad;fB*9o@E^NB?tjtJf0W=+|C@nd{!I+C|5q{o=mItVgF@=Robh|~ z3t;~FzXJGQW&9~i|BH;j68KjEf1d+z|MQmqo`OgHj{*O4z(1eyM;6-k{~E?$1N?d5 z{|Dnwl0R(wf0OYi$?xC(Uj+UmqPYJ#OMgGXqyA@r|7GC6neltq+3o)pG5$R8zXJT9 zF#d$4|9!^a2K+6+e|S&a|19~#Ucc)rc+~&s-NF6;>%jjC`HjPOuSotQ#p{#)MU-2% zyrBJMw|ZWJ{B?A|B9DLG0RA=PH_zX8qd!0(cJF12c!<)X*Ygj={fiNQOBo$Jf4N5R zsDI6WR{hHpFY~_z@*mL)`}3Cmeu78-`iFx4w}JmX#-F%b1QttJ{c9P2^iWeBf&4Kf`)KXRdpi&pM{zucXYkNnN_3(WrK&wm1c z3**mQ`d?!F1>k=V_K`Tfry9{~R~j6Z4VpT+nq z9|`WiJ_7#F$ZzgHn#jLEoS*s^ef%YRCYSG+{IRE0|8`J!>-gX7-`)q~{>O>$tVQ$) zCf`l)sQ)!oe;aXf|MMxRKhF3QPpkYxLj1=w{_4M~{zr+I{(k}gb&NmTto$QF{PP%p z?W4+{^ws|b@IS}++n!PWNyO`w+5cx4e>3_0=MP^3|5uDZxkCB-X)&!$|L2U~%LV8E zSHM543eUd``NPhih6*0dzZmdu1pa3je}VkVL+XEm@h8b&PrRIe{|5fPeR2Kim8$KI5U(E5pgYhRGQ{(Ti|2yE{NPctwx8YgkU*?yK%N2B8 z$2wF@PGgEt&CgF}iP!rN9mA}Dn&46YTd4j7iRAeIC@$;#`g!>w zCV&2Um4AU2(^~U7|0fJTB(L}*3|@13z4sx^{3HIq25;8iP4KAx%Exyuk^a~3e**QN zOn!6xu6jY`7pLcCi_Wdr^O*cu;@6ka!Qno{}tr#BtAeddujGR`;y8pPS490GyeeM&Fv>o{6l4Q zF#pklNAoB8w92oyKe_#ED^BvXUvEF>GWk<4tNfkxM4=p-*EfH`2RFCrbXp{AS8bS@n-%u;tK|E_J6+MQU2zYDt{aCGXE|h{}#rde@*2N^Z&&7n^pz= zU4Xw%?4V_f&H6L1D}OPh{__Qo>Ti5D=r?=$|?-|gyO$M_qb3;K5h{-H5kf1LgR zVp#oy1dr;ke?I8n1Nc`k{^*-_^*_n@>*x!-+Gzab{Ob<*?O^bsh8kU{nali zf0FJm%jp69(-?oWp!{`)&-B+Z{zmfqkAL?A{=YH)4Edi6@jt@&BQLA^n|$>j0Q_Gu z{>0m={#Qf%pELeu^5=d2p1|MZH){OF!;~$1{X_Z9;}3c|D$N-Q%p%_0f5wTI=e+*K z9KRWYNAstCwd$Y$_^CI@zlQP0)~fv9_~qiV>3@y!x4aS@zdpbp6`!w>C7S(rc4+#E0d7pUL0& zn(Dtl{}CX6zhm(H+3o|Czp5;~y05%R=T8%F&Yu|Z$EkR*MCP_ z&Yz<|{uUiBG79>39rt|B+$x*HeD~^T#ld|2xK?`L`0U)IlkM>EFco^Y5$qlO|s7zeWK6 z8OP)COMI*R@;Sr5nEr&|(fGyb3z+@>QNaHUOacg9OB=^_|qQ;_g`axzu!RI|Je7+|7eK+Ai<;lM?O)0|Ni?7;7>CCBKgDW zpTPJV$e;1`|4iUt%J{QC*!6!2)FX zDt`}S{PpfYuP-FteEy9SzpHwfjz=-KpYsHd=1=vfs(=3D$8$jbm5e{}lM=;Rr!0C*@OGUwk znntDXA5DS!y9~nlAKPB}b-g-+&aKyDi8u4-iT}NN7>x&xKSl{2pjvFW+1AFUg&hIP1SrTsGo(H!=Q9yYkc9=%xN$3H<+H>i2e5ruBx<9KSaie}evi zg}?rpz#kc`#?P#O!>)Gq?;?14PyIfpZdc{@yOb{a>z@Vu3G$ocpXsXnVdFoH@wawT zet-S5f&XUmoAt-K+10;@@n^dR>%SWK*O1?=zd(NZJLCSv9RJrCe{v7yZz5RE|GB__ z!Ee?0oBrgUs{W^p4cPQ21&_wRqMPzJQhw>52mBiufAj$5|JwKfqv>DI__N)W-~aiO z`M`hK5L|!cAmtw^82@7WrwCr&)13bmdj&-#0_Zf=wXNaGu??{hh zj$e1dqx^Zw-%h-ozc+&XBN%_%Au7Ll{$ToR7=LpQ)xQ|!mj0W8Kh5|fhbsRbM*mFz zY{tI<_%p!&IOC6z|DX{6Um1VpzN-EjU;VcM|9Zxsw59O!e+i9~bvH z1<${}{l=Kd>lloE&4Un_Xj|Azg8`>%U||6|4zrV7#{x=@fYbkGWmBAJj$QysruhSyzKvSkpD`? zUp!XjpBds$G5+da$}grzX_5X1fWPx_Tz~R7JAWs^qx#dp-vskppbk-vrfNg`$a4*~yup)K;{GKEtNa&*`1=bU^{?1R`Kx^XM}hxZ#$Ons{9*ggs~LYqU*&J2=E?dW z1O6`=e{!gu|1-v)1OCT>fA}ce|F%<Dp>!sz@Ist@sCsf zu;<^!f=B)$`Tfto&jbHS;stuyV)OYwd#3WA71I9!f=B*je^tN#`SS(f|1;zF#w-8e zkp3@c{8h&&e}s5B{x1Rlu48fii3!TTM~HtX!K3=CtCios|6L9Iix_`uqFwz97=Lm= zu>Mzp|9i%tKUev~j$giE{HcM;?>~Nd4fyXo1NT3Ep7Mun|F;Sr^}m_?dD?j8`2QXF z&l!jP#YxI9-d-+S%3(~RFcH8}q3fd5v(%g5SI{LH`9lHb_D z`@JD}c^~uj>m>0p|DDCR68hIq5zx^De26@oAI-^gD{^=rTE|9hbRk>oe? zXD##J!sIUyU#WxA+RT3glfQ=Y*AOT3e+cpynEc)pHGj<4zoJH-9mnJTR}ml9|7`@1 z`kw*){{-Y8NPe^baq^pa&Fj;c{7K9Fbxi&|$p0D0e;<=SP5wSczs>yXnEXwa`3p?` zHjw`dkiYX;c>B$h|L~Cf!-zMx-!|gI=KoN^qxlm(P3^z@^Ix9J=

8?hQ=-=u|cT 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 literal 0 HcmV?d00001 diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d new file mode 100644 index 0000000..f7745f6 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d @@ -0,0 +1,362 @@ +_deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-all.cc \ + /usr/include/stdc-predef.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest.h \ + /usr/include/c++/13/cstddef \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \ + /usr/include/c++/13/pstl/pstl_config.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \ + /usr/include/c++/13/limits /usr/include/c++/13/memory \ + /usr/include/c++/13/bits/memoryfwd.h \ + /usr/include/c++/13/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \ + /usr/include/c++/13/bits/new_allocator.h /usr/include/c++/13/new \ + /usr/include/c++/13/bits/exception.h \ + /usr/include/c++/13/bits/functexcept.h \ + /usr/include/c++/13/bits/exception_defines.h \ + /usr/include/c++/13/bits/move.h /usr/include/c++/13/type_traits \ + /usr/include/c++/13/bits/stl_tempbuf.h \ + /usr/include/c++/13/bits/stl_construct.h \ + /usr/include/c++/13/bits/stl_iterator_base_types.h \ + /usr/include/c++/13/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13/bits/concept_check.h \ + /usr/include/c++/13/debug/assertions.h \ + /usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \ + /usr/include/c++/13/ext/numeric_traits.h \ + /usr/include/c++/13/bits/cpp_type_traits.h \ + /usr/include/c++/13/ext/type_traits.h \ + /usr/include/c++/13/bits/stl_uninitialized.h \ + /usr/include/c++/13/bits/stl_algobase.h \ + /usr/include/c++/13/bits/stl_iterator.h \ + /usr/include/c++/13/bits/ptr_traits.h /usr/include/c++/13/debug/debug.h \ + /usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \ + /usr/include/c++/13/ext/alloc_traits.h \ + /usr/include/c++/13/bits/alloc_traits.h \ + /usr/include/c++/13/bits/stl_raw_storage_iter.h \ + /usr/include/c++/13/bits/align.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-least.h \ + /usr/include/c++/13/bits/uses_allocator.h \ + /usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/tuple \ + /usr/include/c++/13/bits/invoke.h \ + /usr/include/c++/13/bits/stl_function.h \ + /usr/include/c++/13/backward/binders.h \ + /usr/include/c++/13/bits/functional_hash.h \ + /usr/include/c++/13/bits/hash_bytes.h \ + /usr/include/c++/13/bits/shared_ptr.h /usr/include/c++/13/iosfwd \ + /usr/include/c++/13/bits/requires_hosted.h \ + /usr/include/c++/13/bits/stringfwd.h /usr/include/c++/13/bits/postypes.h \ + /usr/include/c++/13/cwchar /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/13/bits/shared_ptr_base.h /usr/include/c++/13/typeinfo \ + /usr/include/c++/13/bits/allocated_ptr.h \ + /usr/include/c++/13/bits/refwrap.h \ + /usr/include/c++/13/ext/aligned_buffer.h \ + /usr/include/c++/13/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/sys/single_threaded.h \ + /usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/exception \ + /usr/include/c++/13/bits/exception_ptr.h \ + /usr/include/c++/13/bits/cxxabi_init_exception.h \ + /usr/include/c++/13/bits/nested_exception.h \ + /usr/include/c++/13/bits/shared_ptr_atomic.h \ + /usr/include/c++/13/bits/atomic_base.h \ + /usr/include/c++/13/bits/atomic_lockfree_defines.h \ + /usr/include/c++/13/backward/auto_ptr.h \ + /usr/include/c++/13/pstl/glue_memory_defs.h \ + /usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/ostream \ + /usr/include/c++/13/ios /usr/include/c++/13/bits/char_traits.h \ + /usr/include/c++/13/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \ + /usr/include/c++/13/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \ + /usr/include/ctype.h /usr/include/c++/13/bits/ios_base.h \ + /usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \ + /usr/include/c++/13/bits/ostream_insert.h \ + /usr/include/c++/13/bits/cxxabi_forced.h \ + /usr/include/c++/13/bits/range_access.h \ + /usr/include/c++/13/initializer_list \ + /usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \ + /usr/include/c++/13/bits/string_view.tcc \ + /usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \ + /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/c++/13/bits/charconv.h \ + /usr/include/c++/13/bits/basic_string.tcc \ + /usr/include/c++/13/bits/memory_resource.h \ + /usr/include/c++/13/bits/uses_allocator_args.h \ + /usr/include/c++/13/bits/locale_classes.tcc \ + /usr/include/c++/13/system_error \ + /usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \ + /usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \ + /usr/include/c++/13/bits/streambuf.tcc \ + /usr/include/c++/13/bits/basic_ios.h \ + /usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \ + /usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \ + /usr/include/c++/13/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \ + /usr/include/c++/13/bits/locale_facets.tcc \ + /usr/include/c++/13/bits/basic_ios.tcc \ + /usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/vector \ + /usr/include/c++/13/bits/stl_vector.h \ + /usr/include/c++/13/bits/stl_bvector.h \ + /usr/include/c++/13/bits/vector.tcc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h \ + /usr/include/c++/13/stdlib.h /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ + /usr/include/c++/13/cstdint /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/struct_stat.h \ + /usr/include/x86_64-linux-gnu/bits/statx.h /usr/include/linux/stat.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ + /usr/include/c++/13/iostream /usr/include/c++/13/istream \ + /usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/locale \ + /usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \ + /usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \ + /usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \ + /usr/include/c++/13/bits/locale_facets_nonio.tcc \ + /usr/include/c++/13/bits/locale_conv.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-port.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-port-arch.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/unistd-decl.h \ + /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ + /usr/include/linux/close_range.h /usr/include/regex.h \ + /usr/include/c++/13/any /usr/include/c++/13/optional \ + /usr/include/c++/13/bits/enable_special_members.h \ + /usr/include/c++/13/variant /usr/include/c++/13/bits/parse_numbers.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum-generic.h \ + /usr/include/x86_64-linux-gnu/bits/signum-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sig_atomic_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-arch.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo-consts-arch.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigevent_t.h \ + /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/types/stack_t.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigstksz.h \ + /usr/include/x86_64-linux-gnu/bits/ss_flags.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sigstack.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/signal_ext.h \ + /usr/include/x86_64-linux-gnu/bits/types/idtype_t.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/float.h \ + /usr/include/c++/13/iomanip /usr/include/c++/13/bits/quoted_string.h \ + /usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \ + /usr/include/c++/13/map /usr/include/c++/13/bits/stl_tree.h \ + /usr/include/c++/13/bits/node_handle.h \ + /usr/include/c++/13/bits/stl_map.h \ + /usr/include/c++/13/bits/stl_multimap.h \ + /usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/set \ + /usr/include/c++/13/bits/stl_set.h \ + /usr/include/c++/13/bits/stl_multiset.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-message.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-filepath.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-string.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-type-util.h \ + /usr/include/c++/13/cxxabi.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/cxxabi_tweaks.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-death-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-death-test-internal.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-matchers.h \ + /usr/include/c++/13/atomic \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-printers.h \ + /usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \ + /usr/include/c++/13/unordered_map \ + /usr/include/c++/13/bits/unordered_map.h \ + /usr/include/c++/13/bits/hashtable.h \ + /usr/include/c++/13/bits/hashtable_policy.h /usr/include/c++/13/array \ + /usr/include/c++/13/compare /usr/include/c++/13/bits/stl_algo.h \ + /usr/include/c++/13/bits/algorithmfwd.h \ + /usr/include/c++/13/bits/stl_heap.h \ + /usr/include/c++/13/bits/uniform_int_dist.h /usr/include/c++/13/utility \ + /usr/include/c++/13/bits/stl_relops.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest-printers.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-param-test.h \ + /usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/gtest-param-util.h \ + /usr/include/c++/13/cassert /usr/include/assert.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-test-part.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_prod.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-typed-test.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest_pred_impl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/internal/custom/gtest.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include/gtest/gtest-spi.h \ + /usr/include/c++/13/algorithm \ + /usr/include/c++/13/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13/chrono /usr/include/c++/13/bits/chrono.h \ + /usr/include/c++/13/ratio /usr/include/c++/13/cmath /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h \ + /usr/include/x86_64-linux-gnu/bits/iscanonical.h \ + /usr/include/c++/13/bits/specfun.h /usr/include/c++/13/tr1/gamma.tcc \ + /usr/include/c++/13/tr1/special_function_util.h \ + /usr/include/c++/13/tr1/bessel_function.tcc \ + /usr/include/c++/13/tr1/beta_function.tcc \ + /usr/include/c++/13/tr1/ell_integral.tcc \ + /usr/include/c++/13/tr1/exp_integral.tcc \ + /usr/include/c++/13/tr1/hypergeometric.tcc \ + /usr/include/c++/13/tr1/legendre_function.tcc \ + /usr/include/c++/13/tr1/modified_bessel_func.tcc \ + /usr/include/c++/13/tr1/poly_hermite.tcc \ + /usr/include/c++/13/tr1/poly_laguerre.tcc \ + /usr/include/c++/13/tr1/riemann_zeta.tcc /usr/include/c++/13/list \ + /usr/include/c++/13/bits/stl_list.h /usr/include/c++/13/bits/list.tcc \ + /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h \ + /usr/include/linux/falloc.h /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ + /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman-map-flags-generic.h \ + /usr/include/x86_64-linux-gnu/bits/mman-linux.h \ + /usr/include/x86_64-linux-gnu/bits/mman-shared.h \ + /usr/include/x86_64-linux-gnu/bits/mman_ext.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/arpa/inet.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/socket_type.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_osockaddr.h \ + /usr/include/x86_64-linux-gnu/bits/socket2.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/netdb.h \ + /usr/include/rpc/netdb.h /usr/include/x86_64-linux-gnu/bits/netdb.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-internal-inl.h \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-death-test.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-filepath.cc \ + /usr/include/c++/13/climits \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-matchers.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-port.cc \ + /usr/include/c++/13/fstream \ + /usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \ + /usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \ + /usr/include/c++/13/bits/fstream.tcc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-printers.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-test-part.cc \ + /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest-typed-test.cc diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake new file mode 100644 index 0000000..9f644bc --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest_main.cc" "_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" "gcc" "_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make new file mode 100644 index 0000000..6196c61 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make @@ -0,0 +1,117 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Produce verbose output by default. +VERBOSE = 1 + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir + +# Include any dependencies generated for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make + +# Include the progress variables for this target. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make + +# Include the compile flags for this target's objects. +include _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen: +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/codegen + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: _deps/googletest-src/googletest/src/gtest_main.cc +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o -MF CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d -o CMakeFiles/gtest_main.dir/src/gtest_main.cc.o -c /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest_main.cc + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gtest_main.dir/src/gtest_main.cc.i" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest_main.cc > CMakeFiles/gtest_main.dir/src/gtest_main.cc.i + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gtest_main.dir/src/gtest_main.cc.s" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/src/gtest_main.cc -o CMakeFiles/gtest_main.dir/src/gtest_main.cc.s + +# Object files for target gtest_main +gtest_main_OBJECTS = \ +"CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + +# External object files for target gtest_main +gtest_main_EXTERNAL_OBJECTS = + +lib/libgtest_main.a: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o +lib/libgtest_main.a: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build.make +lib/libgtest_main.a: _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library ../../../lib/libgtest_main.a" + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest_main.dir/cmake_clean_target.cmake + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gtest_main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build: lib/libgtest_main.a +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/build + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest && $(CMAKE_COMMAND) -P CMakeFiles/gtest_main.dir/cmake_clean.cmake +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/clean + +_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend: + cd /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/runner/work/RingBufferCpp/RingBufferCpp /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/DependInfo.cmake "--color=$(COLOR)" +.PHONY : _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..d2f799e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "../../../bin/libgtest_main.pdb" + "../../../lib/libgtest_main.a" + "CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + "CMakeFiles/gtest_main.dir/src/gtest_main.cc.o.d" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gtest_main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..f09930e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "../../../lib/libgtest_main.a" +) diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make new file mode 100644 index 0000000..9a6afc0 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gtest_main. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts new file mode 100644 index 0000000..033891a --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gtest_main. diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make new file mode 100644 index 0000000..1d67c1a --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gtest_main. +# This may be replaced when dependencies are built. diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make new file mode 100644 index 0000000..ec29071 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.31 + +# compile CXX with /home/runner/work/RingBufferCpp/.codeql-scratch/dbs/cpp/working/autobuild/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest/include -isystem /home/runner/work/RingBufferCpp/RingBufferCpp/_codeql_build_dir/_deps/googletest-src/googletest + +CXX_FLAGS = -O3 -DNDEBUG -std=c++17 -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt new file mode 100644 index 0000000..792baf7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc ../../../lib/libgtest_main.a CMakeFiles/gtest_main.dir/src/gtest_main.cc.o +/usr/bin/ranlib ../../../lib/libgtest_main.a diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make new file mode 100644 index 0000000..b700c2c --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 9 +CMAKE_PROGRESS_2 = 10 + diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o b/_codeql_build_dir/_deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..b6fd229b2832b4e21a9059bd7c2dfce60eca5731 GIT binary patch literal 2200 zcmbVM&ubGw6rQxzR;_6i1+^k8_@f28$tJZH1&M|OWvX!K;6P=N`OBZz9z9HZ$pF-GKPu?Y#HR`)1zGyf<(1b2ELh7?Bbq zx5BwDX74S(tbZ`VgQ!7aAF`%W8aeQl2$UlLC~lR_?c zQyE(>c{cYHEu&`C)WnqMyXn{INi{V&E?`&=k0$|o2(&Q2OkkTG#QH%|PPGRTd$~wr zYl+zC@ZiuE9Q1j>QBm&UCm&C2^gWC#^?2e=d=!CF`_gAvoq z5P(yfR-k;=cDZ4jG`|`dlYzp7DIxOau-vc)e($$M)&b&p8xp?)HVR^cpc2m@2!c4S zDe-9pK@dLzD)B7XD2QWENL&FM1@}emi0ZC4xKSdi%UOG@NsH4pPSmo&4WgD@m#EA^ z2O~9gy4%&jrFBC^4g?sCdrhL6PNP9>Sj2WXRiQ5?V9Hz(e%1EWCUcsU@pVC`HNC=& z2JNKxzs4vKu}8w4knOQx_|3a0__BW`?O*v!#hlWhLCFe-1wpW7y~+Q; zevIOO6udJbzU0aAzTk(?@0;MszL(2{dmrbq2D36ijE}^DYzhB3jJSu)U*`1`Fw7+d z8kBP)K|G(J$h_rPfk|lx<7T43h*)f7?8B~J0lz5t3fMuB`AZDnF$@j!Yl1KPSH_3= zEtrTpzg=;D@|^Jej)6+P#H04cz21rahr}2M3}62+AK#R4?E*yJiy!)cPC&$R9pnU9 QQGEZWU~an;**3!bKWRY{8vp= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "1.11.0") + +if (PACKAGE_FIND_VERSION_RANGE) + # Package version must be in the requested version range + if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + endif() +else() + if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc new file mode 100644 index 0000000..87614c6 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock.pc @@ -0,0 +1,10 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gmock +Description: GoogleMock (without main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Requires: gtest = 1.11.0 +Libs: -L${libdir} -lgmock +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc new file mode 100644 index 0000000..b4c7ac7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gmock_main.pc @@ -0,0 +1,10 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gmock_main +Description: GoogleMock (with main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Requires: gmock = 1.11.0 +Libs: -L${libdir} -lgmock_main +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest.pc new file mode 100644 index 0000000..1e7f6d3 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest.pc @@ -0,0 +1,9 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gtest +Description: GoogleTest (without main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgtest +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest_main.pc b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest_main.pc new file mode 100644 index 0000000..f5c1e51 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-build/googletest/generated/gtest_main.pc @@ -0,0 +1,10 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gtest_main +Description: GoogleTest (with main() function) +Version: 1.11.0 +URL: https://github.com/google/googletest +Requires: gtest = 1.11.0 +Libs: -L${libdir} -lgtest_main +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 diff --git a/_codeql_build_dir/_deps/googletest-src/.clang-format b/_codeql_build_dir/_deps/googletest-src/.clang-format new file mode 100644 index 0000000..5b9bfe6 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/.clang-format @@ -0,0 +1,4 @@ +# Run manually to reformat a file: +# clang-format -i --style=file +Language: Cpp +BasedOnStyle: Google diff --git a/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md new file mode 100644 index 0000000..0f7e8b5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/00-bug_report.md @@ -0,0 +1,43 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'bug' +assignees: '' +--- + +**Describe the bug** + +Include a clear and concise description of what the problem is, including what +you expected to happen, and what actually happened. + +**Steps to reproduce the bug** + +It's important that we are able to reproduce the problem that you are +experiencing. Please provide all code and relevant steps to reproduce the +problem, including your `BUILD`/`CMakeLists.txt` file and build commands. Links +to a GitHub branch or [godbolt.org](https://godbolt.org/) that demonstrate the +problem are also helpful. + +**Does the bug persist in the most recent commit?** + +We recommend using the latest commit in the master branch in your projects. + +**What operating system and version are you using?** + +If you are using a Linux distribution please include the name and version of the +distribution as well. + +**What compiler and version are you using?** + +Please include the output of `gcc -v` or `clang -v`, or the equivalent for your +compiler. + +**What build system are you using?** + +Please include the output of `bazel --version` or `cmake --version`, or the +equivalent for your build system. + +**Additional context** + +Add any other context about the problem here. diff --git a/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md new file mode 100644 index 0000000..70a3a20 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/10-feature_request.md @@ -0,0 +1,24 @@ +--- +name: Feature request +about: Propose a new feature +title: '' +labels: 'enhancement' +assignees: '' +--- + +**Does the feature exist in the most recent commit?** + +We recommend using the latest commit from GitHub in your projects. + +**Why do we need this feature?** + +Ideally, explain why a combination of existing features cannot be used instead. + +**Describe the proposal** + +Include a detailed description of the feature, with usage examples. + +**Is the feature specific to an operating system, compiler, or build system version?** + +If it is, please specify which versions. + diff --git a/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/_codeql_build_dir/_deps/googletest-src/.gitignore b/_codeql_build_dir/_deps/googletest-src/.gitignore new file mode 100644 index 0000000..f08cb72 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/.gitignore @@ -0,0 +1,84 @@ +# Ignore CI build directory +build/ +xcuserdata +cmake-build-debug/ +.idea/ +bazel-bin +bazel-genfiles +bazel-googletest +bazel-out +bazel-testlogs +# python +*.pyc + +# Visual Studio files +.vs +*.sdf +*.opensdf +*.VC.opendb +*.suo +*.user +_ReSharper.Caches/ +Win32-Debug/ +Win32-Release/ +x64-Debug/ +x64-Release/ + +# Ignore autoconf / automake files +Makefile.in +aclocal.m4 +configure +build-aux/ +autom4te.cache/ +googletest/m4/libtool.m4 +googletest/m4/ltoptions.m4 +googletest/m4/ltsugar.m4 +googletest/m4/ltversion.m4 +googletest/m4/lt~obsolete.m4 +googlemock/m4 + +# Ignore generated directories. +googlemock/fused-src/ +googletest/fused-src/ + +# macOS files +.DS_Store +googletest/.DS_Store +googletest/xcode/.DS_Store + +# Ignore cmake generated directories and files. +CMakeFiles +CTestTestfile.cmake +Makefile +cmake_install.cmake +googlemock/CMakeFiles +googlemock/CTestTestfile.cmake +googlemock/Makefile +googlemock/cmake_install.cmake +googlemock/gtest +/bin +/googlemock/gmock.dir +/googlemock/gmock_main.dir +/googlemock/RUN_TESTS.vcxproj.filters +/googlemock/RUN_TESTS.vcxproj +/googlemock/INSTALL.vcxproj.filters +/googlemock/INSTALL.vcxproj +/googlemock/gmock_main.vcxproj.filters +/googlemock/gmock_main.vcxproj +/googlemock/gmock.vcxproj.filters +/googlemock/gmock.vcxproj +/googlemock/gmock.sln +/googlemock/ALL_BUILD.vcxproj.filters +/googlemock/ALL_BUILD.vcxproj +/lib +/Win32 +/ZERO_CHECK.vcxproj.filters +/ZERO_CHECK.vcxproj +/RUN_TESTS.vcxproj.filters +/RUN_TESTS.vcxproj +/INSTALL.vcxproj.filters +/INSTALL.vcxproj +/googletest-distribution.sln +/CMakeCache.txt +/ALL_BUILD.vcxproj.filters +/ALL_BUILD.vcxproj diff --git a/_codeql_build_dir/_deps/googletest-src/BUILD.bazel b/_codeql_build_dir/_deps/googletest-src/BUILD.bazel new file mode 100644 index 0000000..965c518 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/BUILD.bazel @@ -0,0 +1,190 @@ +# Copyright 2017 Google Inc. +# All Rights Reserved. +# +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Bazel Build for Google C++ Testing Framework(Google Test) + +load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test") + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +config_setting( + name = "windows", + constraint_values = ["@platforms//os:windows"], +) + +config_setting( + name = "msvc_compiler", + flag_values = { + "@bazel_tools//tools/cpp:compiler": "msvc-cl", + }, + visibility = [":__subpackages__"], +) + +config_setting( + name = "has_absl", + values = {"define": "absl=1"}, +) + +# Library that defines the FRIEND_TEST macro. +cc_library( + name = "gtest_prod", + hdrs = ["googletest/include/gtest/gtest_prod.h"], + includes = ["googletest/include"], +) + +# Google Test including Google Mock +cc_library( + name = "gtest", + srcs = glob( + include = [ + "googletest/src/*.cc", + "googletest/src/*.h", + "googletest/include/gtest/**/*.h", + "googlemock/src/*.cc", + "googlemock/include/gmock/**/*.h", + ], + exclude = [ + "googletest/src/gtest-all.cc", + "googletest/src/gtest_main.cc", + "googlemock/src/gmock-all.cc", + "googlemock/src/gmock_main.cc", + ], + ), + hdrs = glob([ + "googletest/include/gtest/*.h", + "googlemock/include/gmock/*.h", + ]), + copts = select({ + ":windows": [], + "//conditions:default": ["-pthread"], + }), + defines = select({ + ":has_absl": ["GTEST_HAS_ABSL=1"], + "//conditions:default": [], + }), + features = select({ + ":windows": ["windows_export_all_symbols"], + "//conditions:default": [], + }), + includes = [ + "googlemock", + "googlemock/include", + "googletest", + "googletest/include", + ], + linkopts = select({ + ":windows": [], + "//conditions:default": ["-pthread"], + }), + deps = select({ + ":has_absl": [ + "@com_google_absl//absl/debugging:failure_signal_handler", + "@com_google_absl//absl/debugging:stacktrace", + "@com_google_absl//absl/debugging:symbolize", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/types:any", + "@com_google_absl//absl/types:optional", + "@com_google_absl//absl/types:variant", + ], + "//conditions:default": [], + }), +) + +cc_library( + name = "gtest_main", + srcs = ["googlemock/src/gmock_main.cc"], + features = select({ + ":windows": ["windows_export_all_symbols"], + "//conditions:default": [], + }), + deps = [":gtest"], +) + +# The following rules build samples of how to use gTest. +cc_library( + name = "gtest_sample_lib", + srcs = [ + "googletest/samples/sample1.cc", + "googletest/samples/sample2.cc", + "googletest/samples/sample4.cc", + ], + hdrs = [ + "googletest/samples/prime_tables.h", + "googletest/samples/sample1.h", + "googletest/samples/sample2.h", + "googletest/samples/sample3-inl.h", + "googletest/samples/sample4.h", + ], + features = select({ + ":windows": ["windows_export_all_symbols"], + "//conditions:default": [], + }), +) + +cc_test( + name = "gtest_samples", + size = "small", + # All Samples except: + # sample9 (main) + # sample10 (main and takes a command line option and needs to be separate) + srcs = [ + "googletest/samples/sample1_unittest.cc", + "googletest/samples/sample2_unittest.cc", + "googletest/samples/sample3_unittest.cc", + "googletest/samples/sample4_unittest.cc", + "googletest/samples/sample5_unittest.cc", + "googletest/samples/sample6_unittest.cc", + "googletest/samples/sample7_unittest.cc", + "googletest/samples/sample8_unittest.cc", + ], + linkstatic = 0, + deps = [ + "gtest_sample_lib", + ":gtest_main", + ], +) + +cc_test( + name = "sample9_unittest", + size = "small", + srcs = ["googletest/samples/sample9_unittest.cc"], + deps = [":gtest"], +) + +cc_test( + name = "sample10_unittest", + size = "small", + srcs = ["googletest/samples/sample10_unittest.cc"], + deps = [":gtest"], +) diff --git a/_codeql_build_dir/_deps/googletest-src/CMakeLists.txt b/_codeql_build_dir/_deps/googletest-src/CMakeLists.txt new file mode 100644 index 0000000..ea81ab1 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/CMakeLists.txt @@ -0,0 +1,32 @@ +# Note: CMake support is community-based. The maintainers do not use CMake +# internally. + +cmake_minimum_required(VERSION 2.8.12) + +if (POLICY CMP0048) + cmake_policy(SET CMP0048 NEW) +endif (POLICY CMP0048) + +project(googletest-distribution) +set(GOOGLETEST_VERSION 1.11.0) + +if (CMAKE_VERSION VERSION_GREATER "3.0.2") + if(NOT CYGWIN AND NOT MSYS AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL QNX) + set(CMAKE_CXX_EXTENSIONS OFF) + endif() +endif() + +enable_testing() + +include(CMakeDependentOption) +include(GNUInstallDirs) + +#Note that googlemock target already builds googletest +option(BUILD_GMOCK "Builds the googlemock subproject" ON) +option(INSTALL_GTEST "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" ON) + +if(BUILD_GMOCK) + add_subdirectory( googlemock ) +else() + add_subdirectory( googletest ) +endif() diff --git a/_codeql_build_dir/_deps/googletest-src/CONTRIBUTING.md b/_codeql_build_dir/_deps/googletest-src/CONTRIBUTING.md new file mode 100644 index 0000000..da45e44 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/CONTRIBUTING.md @@ -0,0 +1,130 @@ +# How to become a contributor and submit your own code + +## Contributor License Agreements + +We'd love to accept your patches! Before we can take them, we have to jump a +couple of legal hurdles. + +Please fill out either the individual or corporate Contributor License Agreement +(CLA). + +* If you are an individual writing original source code and you're sure you + own the intellectual property, then you'll need to sign an + [individual CLA](https://developers.google.com/open-source/cla/individual). +* If you work for a company that wants to allow you to contribute your work, + then you'll need to sign a + [corporate CLA](https://developers.google.com/open-source/cla/corporate). + +Follow either of the two links above to access the appropriate CLA and +instructions for how to sign and return it. Once we receive it, we'll be able to +accept your pull requests. + +## Are you a Googler? + +If you are a Googler, please make an attempt to submit an internal change rather +than a GitHub Pull Request. If you are not able to submit an internal change a +PR is acceptable as an alternative. + +## Contributing A Patch + +1. Submit an issue describing your proposed change to the + [issue tracker](https://github.com/google/googletest/issues). +2. Please don't mix more than one logical change per submittal, because it + makes the history hard to follow. If you want to make a change that doesn't + have a corresponding issue in the issue tracker, please create one. +3. Also, coordinate with team members that are listed on the issue in question. + This ensures that work isn't being duplicated and communicating your plan + early also generally leads to better patches. +4. If your proposed change is accepted, and you haven't already done so, sign a + Contributor License Agreement (see details above). +5. Fork the desired repo, develop and test your code changes. +6. Ensure that your code adheres to the existing style in the sample to which + you are contributing. +7. Ensure that your code has an appropriate set of unit tests which all pass. +8. Submit a pull request. + +## The Google Test and Google Mock Communities + +The Google Test community exists primarily through the +[discussion group](http://groups.google.com/group/googletestframework) and the +GitHub repository. Likewise, the Google Mock community exists primarily through +their own [discussion group](http://groups.google.com/group/googlemock). You are +definitely encouraged to contribute to the discussion and you can also help us +to keep the effectiveness of the group high by following and promoting the +guidelines listed here. + +### Please Be Friendly + +Showing courtesy and respect to others is a vital part of the Google culture, +and we strongly encourage everyone participating in Google Test development to +join us in accepting nothing less. Of course, being courteous is not the same as +failing to constructively disagree with each other, but it does mean that we +should be respectful of each other when enumerating the 42 technical reasons +that a particular proposal may not be the best choice. There's never a reason to +be antagonistic or dismissive toward anyone who is sincerely trying to +contribute to a discussion. + +Sure, C++ testing is serious business and all that, but it's also a lot of fun. +Let's keep it that way. Let's strive to be one of the friendliest communities in +all of open source. + +As always, discuss Google Test in the official GoogleTest discussion group. You +don't have to actually submit code in order to sign up. Your participation +itself is a valuable contribution. + +## Style + +To keep the source consistent, readable, diffable and easy to merge, we use a +fairly rigid coding style, as defined by the +[google-styleguide](https://github.com/google/styleguide) project. All patches +will be expected to conform to the style outlined +[here](https://google.github.io/styleguide/cppguide.html). Use +[.clang-format](https://github.com/google/googletest/blob/master/.clang-format) +to check your formatting. + +## Requirements for Contributors + +If you plan to contribute a patch, you need to build Google Test, Google Mock, +and their own tests from a git checkout, which has further requirements: + +* [Python](https://www.python.org/) v2.3 or newer (for running some of the + tests and re-generating certain source files from templates) +* [CMake](https://cmake.org/) v2.8.12 or newer + +## Developing Google Test and Google Mock + +This section discusses how to make your own changes to the Google Test project. + +### Testing Google Test and Google Mock Themselves + +To make sure your changes work as intended and don't break existing +functionality, you'll want to compile and run Google Test and GoogleMock's own +tests. For that you can use CMake: + + mkdir mybuild + cd mybuild + cmake -Dgtest_build_tests=ON -Dgmock_build_tests=ON ${GTEST_REPO_DIR} + +To choose between building only Google Test or Google Mock, you may modify your +cmake command to be one of each + + cmake -Dgtest_build_tests=ON ${GTEST_DIR} # sets up Google Test tests + cmake -Dgmock_build_tests=ON ${GMOCK_DIR} # sets up Google Mock tests + +Make sure you have Python installed, as some of Google Test's tests are written +in Python. If the cmake command complains about not being able to find Python +(`Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE)`), try telling it +explicitly where your Python executable can be found: + + cmake -DPYTHON_EXECUTABLE=path/to/python ... + +Next, you can build Google Test and / or Google Mock and all desired tests. On +\*nix, this is usually done by + + make + +To run the tests, do + + make test + +All tests should pass. diff --git a/_codeql_build_dir/_deps/googletest-src/CONTRIBUTORS b/_codeql_build_dir/_deps/googletest-src/CONTRIBUTORS new file mode 100644 index 0000000..76db0b4 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/CONTRIBUTORS @@ -0,0 +1,63 @@ +# This file contains a list of people who've made non-trivial +# contribution to the Google C++ Testing Framework project. People +# who commit code to the project are encouraged to add their names +# here. Please keep the list sorted by first names. + +Ajay Joshi +Balázs Dán +Benoit Sigoure +Bharat Mediratta +Bogdan Piloca +Chandler Carruth +Chris Prince +Chris Taylor +Dan Egnor +Dave MacLachlan +David Anderson +Dean Sturtevant +Eric Roman +Gene Volovich +Hady Zalek +Hal Burch +Jeffrey Yasskin +Jim Keller +Joe Walnes +Jon Wray +Jói Sigurðsson +Keir Mierle +Keith Ray +Kenton Varda +Kostya Serebryany +Krystian Kuzniarek +Lev Makhlis +Manuel Klimek +Mario Tanev +Mark Paskin +Markus Heule +Matthew Simmons +Mika Raento +Mike Bland +Miklós Fazekas +Neal Norwitz +Nermin Ozkiranartli +Owen Carlsen +Paneendra Ba +Pasi Valminen +Patrick Hanna +Patrick Riley +Paul Menage +Peter Kaminski +Piotr Kaminski +Preston Jackson +Rainer Klaffenboeck +Russ Cox +Russ Rufer +Sean Mcafee +Sigurður Ásgeirsson +Sverre Sundsdal +Takeshi Yoshino +Tracy Bialik +Vadim Berman +Vlad Losev +Wolfgang Klier +Zhanyong Wan diff --git a/_codeql_build_dir/_deps/googletest-src/LICENSE b/_codeql_build_dir/_deps/googletest-src/LICENSE new file mode 100644 index 0000000..1941a11 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/LICENSE @@ -0,0 +1,28 @@ +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/_codeql_build_dir/_deps/googletest-src/README.md b/_codeql_build_dir/_deps/googletest-src/README.md new file mode 100644 index 0000000..7d872a5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/README.md @@ -0,0 +1,140 @@ +# GoogleTest + +### Announcements + +#### Live at Head + +GoogleTest now follows the +[Abseil Live at Head philosophy](https://abseil.io/about/philosophy#upgrade-support). +We recommend using the latest commit in the `master` branch in your projects. + +#### Documentation Updates + +Our documentation is now live on GitHub Pages at +https://google.github.io/googletest/. We recommend browsing the documentation on +GitHub Pages rather than directly in the repository. + +#### Release 1.10.x + +[Release 1.10.x](https://github.com/google/googletest/releases/tag/release-1.10.0) +is now available. + +#### Coming Soon + +* We are planning to take a dependency on + [Abseil](https://github.com/abseil/abseil-cpp). +* More documentation improvements are planned. + +## Welcome to **GoogleTest**, Google's C++ test framework! + +This repository is a merger of the formerly separate GoogleTest and GoogleMock +projects. These were so closely related that it makes sense to maintain and +release them together. + +### Getting Started + +See the [GoogleTest User's Guide](https://google.github.io/googletest/) for +documentation. We recommend starting with the +[GoogleTest Primer](https://google.github.io/googletest/primer.html). + +More information about building GoogleTest can be found at +[googletest/README.md](googletest/README.md). + +## Features + +* An [xUnit](https://en.wikipedia.org/wiki/XUnit) test framework. +* Test discovery. +* A rich set of assertions. +* User-defined assertions. +* Death tests. +* Fatal and non-fatal failures. +* Value-parameterized tests. +* Type-parameterized tests. +* Various options for running the tests. +* XML test report generation. + +## Supported Platforms + +GoogleTest requires a codebase and compiler compliant with the C++11 standard or +newer. + +The GoogleTest code is officially supported on the following platforms. +Operating systems or tools not listed below are community-supported. For +community-supported platforms, patches that do not complicate the code may be +considered. + +If you notice any problems on your platform, please file an issue on the +[GoogleTest GitHub Issue Tracker](https://github.com/google/googletest/issues). +Pull requests containing fixes are welcome! + +### Operating Systems + +* Linux +* macOS +* Windows + +### Compilers + +* gcc 5.0+ +* clang 5.0+ +* MSVC 2015+ + +**macOS users:** Xcode 9.3+ provides clang 5.0+. + +### Build Systems + +* [Bazel](https://bazel.build/) +* [CMake](https://cmake.org/) + +**Note:** Bazel is the build system used by the team internally and in tests. +CMake is supported on a best-effort basis and by the community. + +## Who Is Using GoogleTest? + +In addition to many internal projects at Google, GoogleTest is also used by the +following notable projects: + +* The [Chromium projects](http://www.chromium.org/) (behind the Chrome browser + and Chrome OS). +* The [LLVM](http://llvm.org/) compiler. +* [Protocol Buffers](https://github.com/google/protobuf), Google's data + interchange format. +* The [OpenCV](http://opencv.org/) computer vision library. + +## Related Open Source Projects + +[GTest Runner](https://github.com/nholthaus/gtest-runner) is a Qt5 based +automated test-runner and Graphical User Interface with powerful features for +Windows and Linux platforms. + +[GoogleTest UI](https://github.com/ospector/gtest-gbar) is a test runner that +runs your test binary, allows you to track its progress via a progress bar, and +displays a list of test failures. Clicking on one shows failure text. Google +Test UI is written in C#. + +[GTest TAP Listener](https://github.com/kinow/gtest-tap-listener) is an event +listener for GoogleTest that implements the +[TAP protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol) for test +result output. If your test runner understands TAP, you may find it useful. + +[gtest-parallel](https://github.com/google/gtest-parallel) is a test runner that +runs tests from your binary in parallel to provide significant speed-up. + +[GoogleTest Adapter](https://marketplace.visualstudio.com/items?itemName=DavidSchuldenfrei.gtest-adapter) +is a VS Code extension allowing to view GoogleTest in a tree view, and run/debug +your tests. + +[C++ TestMate](https://github.com/matepek/vscode-catch2-test-adapter) is a VS +Code extension allowing to view GoogleTest in a tree view, and run/debug your +tests. + +[Cornichon](https://pypi.org/project/cornichon/) is a small Gherkin DSL parser +that generates stub code for GoogleTest. + +## Contributing Changes + +Please read +[`CONTRIBUTING.md`](https://github.com/google/googletest/blob/master/CONTRIBUTING.md) +for details on how to contribute to this project. + +Happy testing! diff --git a/_codeql_build_dir/_deps/googletest-src/WORKSPACE b/_codeql_build_dir/_deps/googletest-src/WORKSPACE new file mode 100644 index 0000000..614f557 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/WORKSPACE @@ -0,0 +1,24 @@ +workspace(name = "com_google_googletest") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "com_google_absl", + urls = ["https://github.com/abseil/abseil-cpp/archive/7971fb358ae376e016d2d4fc9327aad95659b25e.zip"], # 2021-05-20T02:59:16Z + strip_prefix = "abseil-cpp-7971fb358ae376e016d2d4fc9327aad95659b25e", + sha256 = "aeba534f7307e36fe084b452299e49b97420667a8d28102cf9a0daeed340b859", +) + +http_archive( + name = "rules_cc", + urls = ["https://github.com/bazelbuild/rules_cc/archive/68cb652a71e7e7e2858c50593e5a9e3b94e5b9a9.zip"], # 2021-05-14T14:51:14Z + strip_prefix = "rules_cc-68cb652a71e7e7e2858c50593e5a9e3b94e5b9a9", + sha256 = "1e19e9a3bc3d4ee91d7fcad00653485ee6c798efbbf9588d40b34cbfbded143d", +) + +http_archive( + name = "rules_python", + urls = ["https://github.com/bazelbuild/rules_python/archive/ed6cc8f2c3692a6a7f013ff8bc185ba77eb9b4d2.zip"], # 2021-05-17T00:24:16Z + strip_prefix = "rules_python-ed6cc8f2c3692a6a7f013ff8bc185ba77eb9b4d2", + sha256 = "98b3c592faea9636ac8444bfd9de7f3fb4c60590932d6e6ac5946e3f8dbd5ff6", +) diff --git a/_codeql_build_dir/_deps/googletest-src/ci/linux-presubmit.sh b/_codeql_build_dir/_deps/googletest-src/ci/linux-presubmit.sh new file mode 100644 index 0000000..6bea1cd --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/ci/linux-presubmit.sh @@ -0,0 +1,126 @@ +#!/bin/bash +# +# Copyright 2020, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -euox pipefail + +readonly LINUX_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20210525" +readonly LINUX_GCC_FLOOR_CONTAINER="gcr.io/google.com/absl-177019/linux_gcc-floor:20201015" + +if [[ -z ${GTEST_ROOT:-} ]]; then + GTEST_ROOT="$(realpath $(dirname ${0})/..)" +fi + +if [[ -z ${STD:-} ]]; then + STD="c++11 c++14 c++17 c++20" +fi + +# Test the CMake build +for cc in /usr/local/bin/gcc /opt/llvm/clang/bin/clang; do + for cmake_off_on in OFF ON; do + time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --tmpfs="/build:exec" \ + --workdir="/build" \ + --rm \ + --env="CC=${cc}" \ + --env="CXX_FLAGS=\"-Werror -Wdeprecated\"" \ + ${LINUX_LATEST_CONTAINER} \ + /bin/bash -c " + cmake /src \ + -DCMAKE_CXX_STANDARD=11 \ + -Dgtest_build_samples=ON \ + -Dgtest_build_tests=ON \ + -Dgmock_build_tests=ON \ + -Dcxx_no_exception=${cmake_off_on} \ + -Dcxx_no_rtti=${cmake_off_on} && \ + make -j$(nproc) && \ + ctest -j$(nproc) --output-on-failure" + done +done + +# Do one test with an older version of GCC +time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --workdir="/src" \ + --rm \ + --env="CC=/usr/local/bin/gcc" \ + ${LINUX_GCC_FLOOR_CONTAINER} \ + /usr/local/bin/bazel test ... \ + --copt="-Wall" \ + --copt="-Werror" \ + --copt="-Wno-error=pragmas" \ + --keep_going \ + --show_timestamps \ + --test_output=errors + +# Test GCC +for std in ${STD}; do + for absl in 0 1; do + time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --workdir="/src" \ + --rm \ + --env="CC=/usr/local/bin/gcc" \ + --env="BAZEL_CXXOPTS=-std=${std}" \ + ${LINUX_LATEST_CONTAINER} \ + /usr/local/bin/bazel test ... \ + --copt="-Wall" \ + --copt="-Werror" \ + --define="absl=${absl}" \ + --distdir="/bazel-distdir" \ + --keep_going \ + --show_timestamps \ + --test_output=errors + done +done + +# Test Clang +for std in ${STD}; do + for absl in 0 1; do + time docker run \ + --volume="${GTEST_ROOT}:/src:ro" \ + --workdir="/src" \ + --rm \ + --env="CC=/opt/llvm/clang/bin/clang" \ + --env="BAZEL_CXXOPTS=-std=${std}" \ + ${LINUX_LATEST_CONTAINER} \ + /usr/local/bin/bazel test ... \ + --copt="--gcc-toolchain=/usr/local" \ + --copt="-Wall" \ + --copt="-Werror" \ + --define="absl=${absl}" \ + --distdir="/bazel-distdir" \ + --keep_going \ + --linkopt="--gcc-toolchain=/usr/local" \ + --show_timestamps \ + --test_output=errors + done +done diff --git a/_codeql_build_dir/_deps/googletest-src/ci/macos-presubmit.sh b/_codeql_build_dir/_deps/googletest-src/ci/macos-presubmit.sh new file mode 100644 index 0000000..d6423fa --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/ci/macos-presubmit.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Copyright 2020, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -euox pipefail + +if [[ -z ${GTEST_ROOT:-} ]]; then + GTEST_ROOT="$(realpath $(dirname ${0})/..)" +fi + +# Test the CMake build +for cmake_off_on in OFF ON; do + BUILD_DIR=$(mktemp -d build_dir.XXXXXXXX) + cd ${BUILD_DIR} + time cmake ${GTEST_ROOT} \ + -DCMAKE_CXX_STANDARD=11 \ + -Dgtest_build_samples=ON \ + -Dgtest_build_tests=ON \ + -Dgmock_build_tests=ON \ + -Dcxx_no_exception=${cmake_off_on} \ + -Dcxx_no_rtti=${cmake_off_on} + time make + time ctest -j$(nproc) --output-on-failure +done + +# Test the Bazel build + +# If we are running on Kokoro, check for a versioned Bazel binary. +KOKORO_GFILE_BAZEL_BIN="bazel-3.7.0-darwin-x86_64" +if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -f ${KOKORO_GFILE_DIR}/${KOKORO_GFILE_BAZEL_BIN} ]]; then + BAZEL_BIN="${KOKORO_GFILE_DIR}/${KOKORO_GFILE_BAZEL_BIN}" + chmod +x ${BAZEL_BIN} +else + BAZEL_BIN="bazel" +fi + +cd ${GTEST_ROOT} +for absl in 0 1; do + ${BAZEL_BIN} test ... \ + --copt="-Wall" \ + --copt="-Werror" \ + --define="absl=${absl}" \ + --keep_going \ + --show_timestamps \ + --test_output=errors +done diff --git a/_codeql_build_dir/_deps/googletest-src/docs/_config.yml b/_codeql_build_dir/_deps/googletest-src/docs/_config.yml new file mode 100644 index 0000000..d12867e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/_config.yml @@ -0,0 +1 @@ +title: GoogleTest diff --git a/_codeql_build_dir/_deps/googletest-src/docs/_data/navigation.yml b/_codeql_build_dir/_deps/googletest-src/docs/_data/navigation.yml new file mode 100644 index 0000000..9f33327 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/_data/navigation.yml @@ -0,0 +1,43 @@ +nav: +- section: "Get Started" + items: + - title: "Supported Platforms" + url: "/platforms.html" + - title: "Quickstart: Bazel" + url: "/quickstart-bazel.html" + - title: "Quickstart: CMake" + url: "/quickstart-cmake.html" +- section: "Guides" + items: + - title: "GoogleTest Primer" + url: "/primer.html" + - title: "Advanced Topics" + url: "/advanced.html" + - title: "Mocking for Dummies" + url: "/gmock_for_dummies.html" + - title: "Mocking Cookbook" + url: "/gmock_cook_book.html" + - title: "Mocking Cheat Sheet" + url: "/gmock_cheat_sheet.html" +- section: "References" + items: + - title: "Testing Reference" + url: "/reference/testing.html" + - title: "Mocking Reference" + url: "/reference/mocking.html" + - title: "Assertions" + url: "/reference/assertions.html" + - title: "Matchers" + url: "/reference/matchers.html" + - title: "Actions" + url: "/reference/actions.html" + - title: "Testing FAQ" + url: "/faq.html" + - title: "Mocking FAQ" + url: "/gmock_faq.html" + - title: "Code Samples" + url: "/samples.html" + - title: "Using pkg-config" + url: "/pkgconfig.html" + - title: "Community Documentation" + url: "/community_created_documentation.html" diff --git a/_codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html b/_codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html new file mode 100644 index 0000000..dcb42d9 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/_layouts/default.html @@ -0,0 +1,58 @@ + + + + + + + +{% seo %} + + + + + +

+
+
+ {{ content }} +
+ +
+ + + + diff --git a/_codeql_build_dir/_deps/googletest-src/docs/_sass/main.scss b/_codeql_build_dir/_deps/googletest-src/docs/_sass/main.scss new file mode 100644 index 0000000..92edc87 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/_sass/main.scss @@ -0,0 +1,200 @@ +// Styles for GoogleTest docs website on GitHub Pages. +// Color variables are defined in +// https://github.com/pages-themes/primer/tree/master/_sass/primer-support/lib/variables + +$sidebar-width: 260px; + +body { + display: flex; + margin: 0; +} + +.sidebar { + background: $black; + color: $text-white; + flex-shrink: 0; + height: 100vh; + overflow: auto; + position: sticky; + top: 0; + width: $sidebar-width; +} + +.sidebar h1 { + font-size: 1.5em; +} + +.sidebar h2 { + color: $gray-light; + font-size: 0.8em; + font-weight: normal; + margin-bottom: 0.8em; + padding-left: 2.5em; + text-transform: uppercase; +} + +.sidebar .header { + background: $black; + padding: 2em; + position: sticky; + top: 0; + width: 100%; +} + +.sidebar .header a { + color: $text-white; + text-decoration: none; +} + +.sidebar .nav-toggle { + display: none; +} + +.sidebar .expander { + cursor: pointer; + display: none; + height: 3em; + position: absolute; + right: 1em; + top: 1.5em; + width: 3em; +} + +.sidebar .expander .arrow { + border: solid $white; + border-width: 0 3px 3px 0; + display: block; + height: 0.7em; + margin: 1em auto; + transform: rotate(45deg); + transition: transform 0.5s; + width: 0.7em; +} + +.sidebar nav { + width: 100%; +} + +.sidebar nav ul { + list-style-type: none; + margin-bottom: 1em; + padding: 0; + + &:last-child { + margin-bottom: 2em; + } + + a { + text-decoration: none; + } + + li { + color: $text-white; + padding-left: 2em; + text-decoration: none; + } + + li.active { + background: $border-gray-darker; + font-weight: bold; + } + + li:hover { + background: $border-gray-darker; + } +} + +.main { + background-color: $bg-gray; + width: calc(100% - #{$sidebar-width}); +} + +.main .main-inner { + background-color: $white; + padding: 2em; +} + +.main .footer { + margin: 0; + padding: 2em; +} + +.main table th { + text-align: left; +} + +.main .callout { + border-left: 0.25em solid $white; + padding: 1em; + + a { + text-decoration: underline; + } + + &.important { + background-color: $bg-yellow-light; + border-color: $bg-yellow; + color: $black; + } + + &.note { + background-color: $bg-blue-light; + border-color: $text-blue; + color: $text-blue; + } + + &.tip { + background-color: $green-000; + border-color: $green-700; + color: $green-700; + } + + &.warning { + background-color: $red-000; + border-color: $text-red; + color: $text-red; + } +} + +.main .good pre { + background-color: $bg-green-light; +} + +.main .bad pre { + background-color: $red-000; +} + +@media all and (max-width: 768px) { + body { + flex-direction: column; + } + + .sidebar { + height: auto; + position: relative; + width: 100%; + } + + .sidebar .expander { + display: block; + } + + .sidebar nav { + height: 0; + overflow: hidden; + } + + .sidebar .nav-toggle:checked { + & ~ nav { + height: auto; + } + + & + .expander .arrow { + transform: rotate(-135deg); + } + } + + .main { + width: 100%; + } +} diff --git a/_codeql_build_dir/_deps/googletest-src/docs/advanced.md b/_codeql_build_dir/_deps/googletest-src/docs/advanced.md new file mode 100644 index 0000000..8dff5ba --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/advanced.md @@ -0,0 +1,2318 @@ +# Advanced googletest Topics + +## Introduction + +Now that you have read the [googletest Primer](primer.md) and learned how to +write tests using googletest, it's time to learn some new tricks. This document +will show you more assertions as well as how to construct complex failure +messages, propagate fatal failures, reuse and speed up your test fixtures, and +use various flags with your tests. + +## More Assertions + +This section covers some less frequently used, but still significant, +assertions. + +### Explicit Success and Failure + +See [Explicit Success and Failure](reference/assertions.md#success-failure) in +the Assertions Reference. + +### Exception Assertions + +See [Exception Assertions](reference/assertions.md#exceptions) in the Assertions +Reference. + +### Predicate Assertions for Better Error Messages + +Even though googletest has a rich set of assertions, they can never be complete, +as it's impossible (nor a good idea) to anticipate all scenarios a user might +run into. Therefore, sometimes a user has to use `EXPECT_TRUE()` to check a +complex expression, for lack of a better macro. This has the problem of not +showing you the values of the parts of the expression, making it hard to +understand what went wrong. As a workaround, some users choose to construct the +failure message by themselves, streaming it into `EXPECT_TRUE()`. However, this +is awkward especially when the expression has side-effects or is expensive to +evaluate. + +googletest gives you three different options to solve this problem: + +#### Using an Existing Boolean Function + +If you already have a function or functor that returns `bool` (or a type that +can be implicitly converted to `bool`), you can use it in a *predicate +assertion* to get the function arguments printed for free. See +[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the Assertions +Reference for details. + +#### Using a Function That Returns an AssertionResult + +While `EXPECT_PRED*()` and friends are handy for a quick job, the syntax is not +satisfactory: you have to use different macros for different arities, and it +feels more like Lisp than C++. The `::testing::AssertionResult` class solves +this problem. + +An `AssertionResult` object represents the result of an assertion (whether it's +a success or a failure, and an associated message). You can create an +`AssertionResult` using one of these factory functions: + +```c++ +namespace testing { + +// Returns an AssertionResult object to indicate that an assertion has +// succeeded. +AssertionResult AssertionSuccess(); + +// Returns an AssertionResult object to indicate that an assertion has +// failed. +AssertionResult AssertionFailure(); + +} +``` + +You can then use the `<<` operator to stream messages to the `AssertionResult` +object. + +To provide more readable messages in Boolean assertions (e.g. `EXPECT_TRUE()`), +write a predicate function that returns `AssertionResult` instead of `bool`. For +example, if you define `IsEven()` as: + +```c++ +testing::AssertionResult IsEven(int n) { + if ((n % 2) == 0) + return testing::AssertionSuccess(); + else + return testing::AssertionFailure() << n << " is odd"; +} +``` + +instead of: + +```c++ +bool IsEven(int n) { + return (n % 2) == 0; +} +``` + +the failed assertion `EXPECT_TRUE(IsEven(Fib(4)))` will print: + +```none +Value of: IsEven(Fib(4)) + Actual: false (3 is odd) +Expected: true +``` + +instead of a more opaque + +```none +Value of: IsEven(Fib(4)) + Actual: false +Expected: true +``` + +If you want informative messages in `EXPECT_FALSE` and `ASSERT_FALSE` as well +(one third of Boolean assertions in the Google code base are negative ones), and +are fine with making the predicate slower in the success case, you can supply a +success message: + +```c++ +testing::AssertionResult IsEven(int n) { + if ((n % 2) == 0) + return testing::AssertionSuccess() << n << " is even"; + else + return testing::AssertionFailure() << n << " is odd"; +} +``` + +Then the statement `EXPECT_FALSE(IsEven(Fib(6)))` will print + +```none + Value of: IsEven(Fib(6)) + Actual: true (8 is even) + Expected: false +``` + +#### Using a Predicate-Formatter + +If you find the default message generated by +[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) and +[`EXPECT_TRUE`](reference/assertions.md#EXPECT_TRUE) unsatisfactory, or some +arguments to your predicate do not support streaming to `ostream`, you can +instead use *predicate-formatter assertions* to *fully* customize how the +message is formatted. See +[`EXPECT_PRED_FORMAT*`](reference/assertions.md#EXPECT_PRED_FORMAT) in the +Assertions Reference for details. + +### Floating-Point Comparison + +See [Floating-Point Comparison](reference/assertions.md#floating-point) in the +Assertions Reference. + +#### Floating-Point Predicate-Format Functions + +Some floating-point operations are useful, but not that often used. In order to +avoid an explosion of new macros, we provide them as predicate-format functions +that can be used in the predicate assertion macro +[`EXPECT_PRED_FORMAT2`](reference/assertions.md#EXPECT_PRED_FORMAT), for +example: + +```c++ +EXPECT_PRED_FORMAT2(testing::FloatLE, val1, val2); +EXPECT_PRED_FORMAT2(testing::DoubleLE, val1, val2); +``` + +The above code verifies that `val1` is less than, or approximately equal to, +`val2`. + +### Asserting Using gMock Matchers + +See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions +Reference. + +### More String Assertions + +(Please read the [previous](#asserting-using-gmock-matchers) section first if +you haven't.) + +You can use the gMock [string matchers](reference/matchers.md#string-matchers) +with [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) to do more string +comparison tricks (sub-string, prefix, suffix, regular expression, and etc). For +example, + +```c++ +using ::testing::HasSubstr; +using ::testing::MatchesRegex; +... + ASSERT_THAT(foo_string, HasSubstr("needle")); + EXPECT_THAT(bar_string, MatchesRegex("\\w*\\d+")); +``` + +### Windows HRESULT assertions + +See [Windows HRESULT Assertions](reference/assertions.md#HRESULT) in the +Assertions Reference. + +### Type Assertions + +You can call the function + +```c++ +::testing::StaticAssertTypeEq(); +``` + +to assert that types `T1` and `T2` are the same. The function does nothing if +the assertion is satisfied. If the types are different, the function call will +fail to compile, the compiler error message will say that +`T1 and T2 are not the same type` and most likely (depending on the compiler) +show you the actual values of `T1` and `T2`. This is mainly useful inside +template code. + +**Caveat**: When used inside a member function of a class template or a function +template, `StaticAssertTypeEq()` is effective only if the function is +instantiated. For example, given: + +```c++ +template class Foo { + public: + void Bar() { testing::StaticAssertTypeEq(); } +}; +``` + +the code: + +```c++ +void Test1() { Foo foo; } +``` + +will not generate a compiler error, as `Foo::Bar()` is never actually +instantiated. Instead, you need: + +```c++ +void Test2() { Foo foo; foo.Bar(); } +``` + +to cause a compiler error. + +### Assertion Placement + +You can use assertions in any C++ function. In particular, it doesn't have to be +a method of the test fixture class. The one constraint is that assertions that +generate a fatal failure (`FAIL*` and `ASSERT_*`) can only be used in +void-returning functions. This is a consequence of Google's not using +exceptions. By placing it in a non-void function you'll get a confusing compile +error like `"error: void value not ignored as it ought to be"` or `"cannot +initialize return object of type 'bool' with an rvalue of type 'void'"` or +`"error: no viable conversion from 'void' to 'string'"`. + +If you need to use fatal assertions in a function that returns non-void, one +option is to make the function return the value in an out parameter instead. For +example, you can rewrite `T2 Foo(T1 x)` to `void Foo(T1 x, T2* result)`. You +need to make sure that `*result` contains some sensible value even when the +function returns prematurely. As the function now returns `void`, you can use +any assertion inside of it. + +If changing the function's type is not an option, you should just use assertions +that generate non-fatal failures, such as `ADD_FAILURE*` and `EXPECT_*`. + +{: .callout .note} +NOTE: Constructors and destructors are not considered void-returning functions, +according to the C++ language specification, and so you may not use fatal +assertions in them; you'll get a compilation error if you try. Instead, either +call `abort` and crash the entire test executable, or put the fatal assertion in +a `SetUp`/`TearDown` function; see +[constructor/destructor vs. `SetUp`/`TearDown`](faq.md#CtorVsSetUp) + +{: .callout .warning} +WARNING: A fatal assertion in a helper function (private void-returning method) +called from a constructor or destructor does not terminate the current test, as +your intuition might suggest: it merely returns from the constructor or +destructor early, possibly leaving your object in a partially-constructed or +partially-destructed state! You almost certainly want to `abort` or use +`SetUp`/`TearDown` instead. + +## Skipping test execution + +Related to the assertions `SUCCEED()` and `FAIL()`, you can prevent further test +execution at runtime with the `GTEST_SKIP()` macro. This is useful when you need +to check for preconditions of the system under test during runtime and skip +tests in a meaningful way. + +`GTEST_SKIP()` can be used in individual test cases or in the `SetUp()` methods +of classes derived from either `::testing::Environment` or `::testing::Test`. +For example: + +```c++ +TEST(SkipTest, DoesSkip) { + GTEST_SKIP() << "Skipping single test"; + EXPECT_EQ(0, 1); // Won't fail; it won't be executed +} + +class SkipFixture : public ::testing::Test { + protected: + void SetUp() override { + GTEST_SKIP() << "Skipping all tests for this fixture"; + } +}; + +// Tests for SkipFixture won't be executed. +TEST_F(SkipFixture, SkipsOneTest) { + EXPECT_EQ(5, 7); // Won't fail +} +``` + +As with assertion macros, you can stream a custom message into `GTEST_SKIP()`. + +## Teaching googletest How to Print Your Values + +When a test assertion such as `EXPECT_EQ` fails, googletest prints the argument +values to help you debug. It does this using a user-extensible value printer. + +This printer knows how to print built-in C++ types, native arrays, STL +containers, and any type that supports the `<<` operator. For other types, it +prints the raw bytes in the value and hopes that you the user can figure it out. + +As mentioned earlier, the printer is *extensible*. That means you can teach it +to do a better job at printing your particular type than to dump the bytes. To +do that, define `<<` for your type: + +```c++ +#include + +namespace foo { + +class Bar { // We want googletest to be able to print instances of this. +... + // Create a free inline friend function. + friend std::ostream& operator<<(std::ostream& os, const Bar& bar) { + return os << bar.DebugString(); // whatever needed to print bar to os + } +}; + +// If you can't declare the function in the class it's important that the +// << operator is defined in the SAME namespace that defines Bar. C++'s look-up +// rules rely on that. +std::ostream& operator<<(std::ostream& os, const Bar& bar) { + return os << bar.DebugString(); // whatever needed to print bar to os +} + +} // namespace foo +``` + +Sometimes, this might not be an option: your team may consider it bad style to +have a `<<` operator for `Bar`, or `Bar` may already have a `<<` operator that +doesn't do what you want (and you cannot change it). If so, you can instead +define a `PrintTo()` function like this: + +```c++ +#include + +namespace foo { + +class Bar { + ... + friend void PrintTo(const Bar& bar, std::ostream* os) { + *os << bar.DebugString(); // whatever needed to print bar to os + } +}; + +// If you can't declare the function in the class it's important that PrintTo() +// is defined in the SAME namespace that defines Bar. C++'s look-up rules rely +// on that. +void PrintTo(const Bar& bar, std::ostream* os) { + *os << bar.DebugString(); // whatever needed to print bar to os +} + +} // namespace foo +``` + +If you have defined both `<<` and `PrintTo()`, the latter will be used when +googletest is concerned. This allows you to customize how the value appears in +googletest's output without affecting code that relies on the behavior of its +`<<` operator. + +If you want to print a value `x` using googletest's value printer yourself, just +call `::testing::PrintToString(x)`, which returns an `std::string`: + +```c++ +vector > bar_ints = GetBarIntVector(); + +EXPECT_TRUE(IsCorrectBarIntVector(bar_ints)) + << "bar_ints = " << testing::PrintToString(bar_ints); +``` + +## Death Tests + +In many applications, there are assertions that can cause application failure if +a condition is not met. These sanity checks, which ensure that the program is in +a known good state, are there to fail at the earliest possible time after some +program state is corrupted. If the assertion checks the wrong condition, then +the program may proceed in an erroneous state, which could lead to memory +corruption, security holes, or worse. Hence it is vitally important to test that +such assertion statements work as expected. + +Since these precondition checks cause the processes to die, we call such tests +_death tests_. More generally, any test that checks that a program terminates +(except by throwing an exception) in an expected fashion is also a death test. + +Note that if a piece of code throws an exception, we don't consider it "death" +for the purpose of death tests, as the caller of the code could catch the +exception and avoid the crash. If you want to verify exceptions thrown by your +code, see [Exception Assertions](#ExceptionAssertions). + +If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see +["Catching" Failures](#catching-failures). + +### How to Write a Death Test + +GoogleTest provides assertion macros to support death tests. See +[Death Assertions](reference/assertions.md#death) in the Assertions Reference +for details. + +To write a death test, simply use one of the macros inside your test function. +For example, + +```c++ +TEST(MyDeathTest, Foo) { + // This death test uses a compound statement. + ASSERT_DEATH({ + int n = 5; + Foo(&n); + }, "Error on line .* of Foo()"); +} + +TEST(MyDeathTest, NormalExit) { + EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success"); +} + +TEST(MyDeathTest, KillProcess) { + EXPECT_EXIT(KillProcess(), testing::KilledBySignal(SIGKILL), + "Sending myself unblockable signal"); +} +``` + +verifies that: + +* calling `Foo(5)` causes the process to die with the given error message, +* calling `NormalExit()` causes the process to print `"Success"` to stderr and + exit with exit code 0, and +* calling `KillProcess()` kills the process with signal `SIGKILL`. + +The test function body may contain other assertions and statements as well, if +necessary. + +Note that a death test only cares about three things: + +1. does `statement` abort or exit the process? +2. (in the case of `ASSERT_EXIT` and `EXPECT_EXIT`) does the exit status + satisfy `predicate`? Or (in the case of `ASSERT_DEATH` and `EXPECT_DEATH`) + is the exit status non-zero? And +3. does the stderr output match `matcher`? + +In particular, if `statement` generates an `ASSERT_*` or `EXPECT_*` failure, it +will **not** cause the death test to fail, as googletest assertions don't abort +the process. + +### Death Test Naming + +{: .callout .important} +IMPORTANT: We strongly recommend you to follow the convention of naming your +**test suite** (not test) `*DeathTest` when it contains a death test, as +demonstrated in the above example. The +[Death Tests And Threads](#death-tests-and-threads) section below explains why. + +If a test fixture class is shared by normal tests and death tests, you can use +`using` or `typedef` to introduce an alias for the fixture class and avoid +duplicating its code: + +```c++ +class FooTest : public testing::Test { ... }; + +using FooDeathTest = FooTest; + +TEST_F(FooTest, DoesThis) { + // normal test +} + +TEST_F(FooDeathTest, DoesThat) { + // death test +} +``` + +### Regular Expression Syntax + +On POSIX systems (e.g. Linux, Cygwin, and Mac), googletest uses the +[POSIX extended regular expression](http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04) +syntax. To learn about this syntax, you may want to read this +[Wikipedia entry](http://en.wikipedia.org/wiki/Regular_expression#POSIX_Extended_Regular_Expressions). + +On Windows, googletest uses its own simple regular expression implementation. It +lacks many features. For example, we don't support union (`"x|y"`), grouping +(`"(xy)"`), brackets (`"[xy]"`), and repetition count (`"x{5,7}"`), among +others. Below is what we do support (`A` denotes a literal character, period +(`.`), or a single `\\ ` escape sequence; `x` and `y` denote regular +expressions.): + +Expression | Meaning +---------- | -------------------------------------------------------------- +`c` | matches any literal character `c` +`\\d` | matches any decimal digit +`\\D` | matches any character that's not a decimal digit +`\\f` | matches `\f` +`\\n` | matches `\n` +`\\r` | matches `\r` +`\\s` | matches any ASCII whitespace, including `\n` +`\\S` | matches any character that's not a whitespace +`\\t` | matches `\t` +`\\v` | matches `\v` +`\\w` | matches any letter, `_`, or decimal digit +`\\W` | matches any character that `\\w` doesn't match +`\\c` | matches any literal character `c`, which must be a punctuation +`.` | matches any single character except `\n` +`A?` | matches 0 or 1 occurrences of `A` +`A*` | matches 0 or many occurrences of `A` +`A+` | matches 1 or many occurrences of `A` +`^` | matches the beginning of a string (not that of each line) +`$` | matches the end of a string (not that of each line) +`xy` | matches `x` followed by `y` + +To help you determine which capability is available on your system, googletest +defines macros to govern which regular expression it is using. The macros are: +`GTEST_USES_SIMPLE_RE=1` or `GTEST_USES_POSIX_RE=1`. If you want your death +tests to work in all cases, you can either `#if` on these macros or use the more +limited syntax only. + +### How It Works + +See [Death Assertions](reference/assertions.md#death) in the Assertions +Reference. + +### Death Tests And Threads + +The reason for the two death test styles has to do with thread safety. Due to +well-known problems with forking in the presence of threads, death tests should +be run in a single-threaded context. Sometimes, however, it isn't feasible to +arrange that kind of environment. For example, statically-initialized modules +may start threads before main is ever reached. Once threads have been created, +it may be difficult or impossible to clean them up. + +googletest has three features intended to raise awareness of threading issues. + +1. A warning is emitted if multiple threads are running when a death test is + encountered. +2. Test suites with a name ending in "DeathTest" are run before all other + tests. +3. It uses `clone()` instead of `fork()` to spawn the child process on Linux + (`clone()` is not available on Cygwin and Mac), as `fork()` is more likely + to cause the child to hang when the parent process has multiple threads. + +It's perfectly fine to create threads inside a death test statement; they are +executed in a separate process and cannot affect the parent. + +### Death Test Styles + +The "threadsafe" death test style was introduced in order to help mitigate the +risks of testing in a possibly multithreaded environment. It trades increased +test execution time (potentially dramatically so) for improved thread safety. + +The automated testing framework does not set the style flag. You can choose a +particular style of death tests by setting the flag programmatically: + +```c++ +testing::FLAGS_gtest_death_test_style="threadsafe" +``` + +You can do this in `main()` to set the style for all death tests in the binary, +or in individual tests. Recall that flags are saved before running each test and +restored afterwards, so you need not do that yourself. For example: + +```c++ +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + testing::FLAGS_gtest_death_test_style = "fast"; + return RUN_ALL_TESTS(); +} + +TEST(MyDeathTest, TestOne) { + testing::FLAGS_gtest_death_test_style = "threadsafe"; + // This test is run in the "threadsafe" style: + ASSERT_DEATH(ThisShouldDie(), ""); +} + +TEST(MyDeathTest, TestTwo) { + // This test is run in the "fast" style: + ASSERT_DEATH(ThisShouldDie(), ""); +} +``` + +### Caveats + +The `statement` argument of `ASSERT_EXIT()` can be any valid C++ statement. If +it leaves the current function via a `return` statement or by throwing an +exception, the death test is considered to have failed. Some googletest macros +may return from the current function (e.g. `ASSERT_TRUE()`), so be sure to avoid +them in `statement`. + +Since `statement` runs in the child process, any in-memory side effect (e.g. +modifying a variable, releasing memory, etc) it causes will *not* be observable +in the parent process. In particular, if you release memory in a death test, +your program will fail the heap check as the parent process will never see the +memory reclaimed. To solve this problem, you can + +1. try not to free memory in a death test; +2. free the memory again in the parent process; or +3. do not use the heap checker in your program. + +Due to an implementation detail, you cannot place multiple death test assertions +on the same line; otherwise, compilation will fail with an unobvious error +message. + +Despite the improved thread safety afforded by the "threadsafe" style of death +test, thread problems such as deadlock are still possible in the presence of +handlers registered with `pthread_atfork(3)`. + + +## Using Assertions in Sub-routines + +{: .callout .note} +Note: If you want to put a series of test assertions in a subroutine to check +for a complex condition, consider using +[a custom GMock matcher](gmock_cook_book.md#NewMatchers) +instead. This lets you provide a more readable error message in case of failure +and avoid all of the issues described below. + +### Adding Traces to Assertions + +If a test sub-routine is called from several places, when an assertion inside it +fails, it can be hard to tell which invocation of the sub-routine the failure is +from. You can alleviate this problem using extra logging or custom failure +messages, but that usually clutters up your tests. A better solution is to use +the `SCOPED_TRACE` macro or the `ScopedTrace` utility: + +```c++ +SCOPED_TRACE(message); +``` +```c++ +ScopedTrace trace("file_path", line_number, message); +``` + +where `message` can be anything streamable to `std::ostream`. `SCOPED_TRACE` +macro will cause the current file name, line number, and the given message to be +added in every failure message. `ScopedTrace` accepts explicit file name and +line number in arguments, which is useful for writing test helpers. The effect +will be undone when the control leaves the current lexical scope. + +For example, + +```c++ +10: void Sub1(int n) { +11: EXPECT_EQ(Bar(n), 1); +12: EXPECT_EQ(Bar(n + 1), 2); +13: } +14: +15: TEST(FooTest, Bar) { +16: { +17: SCOPED_TRACE("A"); // This trace point will be included in +18: // every failure in this scope. +19: Sub1(1); +20: } +21: // Now it won't. +22: Sub1(9); +23: } +``` + +could result in messages like these: + +```none +path/to/foo_test.cc:11: Failure +Value of: Bar(n) +Expected: 1 + Actual: 2 +Google Test trace: +path/to/foo_test.cc:17: A + +path/to/foo_test.cc:12: Failure +Value of: Bar(n + 1) +Expected: 2 + Actual: 3 +``` + +Without the trace, it would've been difficult to know which invocation of +`Sub1()` the two failures come from respectively. (You could add an extra +message to each assertion in `Sub1()` to indicate the value of `n`, but that's +tedious.) + +Some tips on using `SCOPED_TRACE`: + +1. With a suitable message, it's often enough to use `SCOPED_TRACE` at the + beginning of a sub-routine, instead of at each call site. +2. When calling sub-routines inside a loop, make the loop iterator part of the + message in `SCOPED_TRACE` such that you can know which iteration the failure + is from. +3. Sometimes the line number of the trace point is enough for identifying the + particular invocation of a sub-routine. In this case, you don't have to + choose a unique message for `SCOPED_TRACE`. You can simply use `""`. +4. You can use `SCOPED_TRACE` in an inner scope when there is one in the outer + scope. In this case, all active trace points will be included in the failure + messages, in reverse order they are encountered. +5. The trace dump is clickable in Emacs - hit `return` on a line number and + you'll be taken to that line in the source file! + +### Propagating Fatal Failures + +A common pitfall when using `ASSERT_*` and `FAIL*` is not understanding that +when they fail they only abort the _current function_, not the entire test. For +example, the following test will segfault: + +```c++ +void Subroutine() { + // Generates a fatal failure and aborts the current function. + ASSERT_EQ(1, 2); + + // The following won't be executed. + ... +} + +TEST(FooTest, Bar) { + Subroutine(); // The intended behavior is for the fatal failure + // in Subroutine() to abort the entire test. + + // The actual behavior: the function goes on after Subroutine() returns. + int* p = nullptr; + *p = 3; // Segfault! +} +``` + +To alleviate this, googletest provides three different solutions. You could use +either exceptions, the `(ASSERT|EXPECT)_NO_FATAL_FAILURE` assertions or the +`HasFatalFailure()` function. They are described in the following two +subsections. + +#### Asserting on Subroutines with an exception + +The following code can turn ASSERT-failure into an exception: + +```c++ +class ThrowListener : public testing::EmptyTestEventListener { + void OnTestPartResult(const testing::TestPartResult& result) override { + if (result.type() == testing::TestPartResult::kFatalFailure) { + throw testing::AssertionException(result); + } + } +}; +int main(int argc, char** argv) { + ... + testing::UnitTest::GetInstance()->listeners().Append(new ThrowListener); + return RUN_ALL_TESTS(); +} +``` + +This listener should be added after other listeners if you have any, otherwise +they won't see failed `OnTestPartResult`. + +#### Asserting on Subroutines + +As shown above, if your test calls a subroutine that has an `ASSERT_*` failure +in it, the test will continue after the subroutine returns. This may not be what +you want. + +Often people want fatal failures to propagate like exceptions. For that +googletest offers the following macros: + +Fatal assertion | Nonfatal assertion | Verifies +------------------------------------- | ------------------------------------- | -------- +`ASSERT_NO_FATAL_FAILURE(statement);` | `EXPECT_NO_FATAL_FAILURE(statement);` | `statement` doesn't generate any new fatal failures in the current thread. + +Only failures in the thread that executes the assertion are checked to determine +the result of this type of assertions. If `statement` creates new threads, +failures in these threads are ignored. + +Examples: + +```c++ +ASSERT_NO_FATAL_FAILURE(Foo()); + +int i; +EXPECT_NO_FATAL_FAILURE({ + i = Bar(); +}); +``` + +Assertions from multiple threads are currently not supported on Windows. + +#### Checking for Failures in the Current Test + +`HasFatalFailure()` in the `::testing::Test` class returns `true` if an +assertion in the current test has suffered a fatal failure. This allows +functions to catch fatal failures in a sub-routine and return early. + +```c++ +class Test { + public: + ... + static bool HasFatalFailure(); +}; +``` + +The typical usage, which basically simulates the behavior of a thrown exception, +is: + +```c++ +TEST(FooTest, Bar) { + Subroutine(); + // Aborts if Subroutine() had a fatal failure. + if (HasFatalFailure()) return; + + // The following won't be executed. + ... +} +``` + +If `HasFatalFailure()` is used outside of `TEST()` , `TEST_F()` , or a test +fixture, you must add the `::testing::Test::` prefix, as in: + +```c++ +if (testing::Test::HasFatalFailure()) return; +``` + +Similarly, `HasNonfatalFailure()` returns `true` if the current test has at +least one non-fatal failure, and `HasFailure()` returns `true` if the current +test has at least one failure of either kind. + +## Logging Additional Information + +In your test code, you can call `RecordProperty("key", value)` to log additional +information, where `value` can be either a string or an `int`. The *last* value +recorded for a key will be emitted to the +[XML output](#generating-an-xml-report) if you specify one. For example, the +test + +```c++ +TEST_F(WidgetUsageTest, MinAndMaxWidgets) { + RecordProperty("MaximumWidgets", ComputeMaxUsage()); + RecordProperty("MinimumWidgets", ComputeMinUsage()); +} +``` + +will output XML like this: + +```xml + ... + + ... +``` + +{: .callout .note} +> NOTE: +> +> * `RecordProperty()` is a static member of the `Test` class. Therefore it +> needs to be prefixed with `::testing::Test::` if used outside of the +> `TEST` body and the test fixture class. +> * *`key`* must be a valid XML attribute name, and cannot conflict with the +> ones already used by googletest (`name`, `status`, `time`, `classname`, +> `type_param`, and `value_param`). +> * Calling `RecordProperty()` outside of the lifespan of a test is allowed. +> If it's called outside of a test but between a test suite's +> `SetUpTestSuite()` and `TearDownTestSuite()` methods, it will be +> attributed to the XML element for the test suite. If it's called outside +> of all test suites (e.g. in a test environment), it will be attributed to +> the top-level XML element. + +## Sharing Resources Between Tests in the Same Test Suite + +googletest creates a new test fixture object for each test in order to make +tests independent and easier to debug. However, sometimes tests use resources +that are expensive to set up, making the one-copy-per-test model prohibitively +expensive. + +If the tests don't change the resource, there's no harm in their sharing a +single resource copy. So, in addition to per-test set-up/tear-down, googletest +also supports per-test-suite set-up/tear-down. To use it: + +1. In your test fixture class (say `FooTest` ), declare as `static` some member + variables to hold the shared resources. +2. Outside your test fixture class (typically just below it), define those + member variables, optionally giving them initial values. +3. In the same test fixture class, define a `static void SetUpTestSuite()` + function (remember not to spell it as **`SetupTestSuite`** with a small + `u`!) to set up the shared resources and a `static void TearDownTestSuite()` + function to tear them down. + +That's it! googletest automatically calls `SetUpTestSuite()` before running the +*first test* in the `FooTest` test suite (i.e. before creating the first +`FooTest` object), and calls `TearDownTestSuite()` after running the *last test* +in it (i.e. after deleting the last `FooTest` object). In between, the tests can +use the shared resources. + +Remember that the test order is undefined, so your code can't depend on a test +preceding or following another. Also, the tests must either not modify the state +of any shared resource, or, if they do modify the state, they must restore the +state to its original value before passing control to the next test. + +Here's an example of per-test-suite set-up and tear-down: + +```c++ +class FooTest : public testing::Test { + protected: + // Per-test-suite set-up. + // Called before the first test in this test suite. + // Can be omitted if not needed. + static void SetUpTestSuite() { + shared_resource_ = new ...; + } + + // Per-test-suite tear-down. + // Called after the last test in this test suite. + // Can be omitted if not needed. + static void TearDownTestSuite() { + delete shared_resource_; + shared_resource_ = nullptr; + } + + // You can define per-test set-up logic as usual. + void SetUp() override { ... } + + // You can define per-test tear-down logic as usual. + void TearDown() override { ... } + + // Some expensive resource shared by all tests. + static T* shared_resource_; +}; + +T* FooTest::shared_resource_ = nullptr; + +TEST_F(FooTest, Test1) { + ... you can refer to shared_resource_ here ... +} + +TEST_F(FooTest, Test2) { + ... you can refer to shared_resource_ here ... +} +``` + +{: .callout .note} +NOTE: Though the above code declares `SetUpTestSuite()` protected, it may +sometimes be necessary to declare it public, such as when using it with +`TEST_P`. + +## Global Set-Up and Tear-Down + +Just as you can do set-up and tear-down at the test level and the test suite +level, you can also do it at the test program level. Here's how. + +First, you subclass the `::testing::Environment` class to define a test +environment, which knows how to set-up and tear-down: + +```c++ +class Environment : public ::testing::Environment { + public: + ~Environment() override {} + + // Override this to define how to set up the environment. + void SetUp() override {} + + // Override this to define how to tear down the environment. + void TearDown() override {} +}; +``` + +Then, you register an instance of your environment class with googletest by +calling the `::testing::AddGlobalTestEnvironment()` function: + +```c++ +Environment* AddGlobalTestEnvironment(Environment* env); +``` + +Now, when `RUN_ALL_TESTS()` is called, it first calls the `SetUp()` method of +each environment object, then runs the tests if none of the environments +reported fatal failures and `GTEST_SKIP()` was not called. `RUN_ALL_TESTS()` +always calls `TearDown()` with each environment object, regardless of whether or +not the tests were run. + +It's OK to register multiple environment objects. In this suite, their `SetUp()` +will be called in the order they are registered, and their `TearDown()` will be +called in the reverse order. + +Note that googletest takes ownership of the registered environment objects. +Therefore **do not delete them** by yourself. + +You should call `AddGlobalTestEnvironment()` before `RUN_ALL_TESTS()` is called, +probably in `main()`. If you use `gtest_main`, you need to call this before +`main()` starts for it to take effect. One way to do this is to define a global +variable like this: + +```c++ +testing::Environment* const foo_env = + testing::AddGlobalTestEnvironment(new FooEnvironment); +``` + +However, we strongly recommend you to write your own `main()` and call +`AddGlobalTestEnvironment()` there, as relying on initialization of global +variables makes the code harder to read and may cause problems when you register +multiple environments from different translation units and the environments have +dependencies among them (remember that the compiler doesn't guarantee the order +in which global variables from different translation units are initialized). + +## Value-Parameterized Tests + +*Value-parameterized tests* allow you to test your code with different +parameters without writing multiple copies of the same test. This is useful in a +number of situations, for example: + +* You have a piece of code whose behavior is affected by one or more + command-line flags. You want to make sure your code performs correctly for + various values of those flags. +* You want to test different implementations of an OO interface. +* You want to test your code over various inputs (a.k.a. data-driven testing). + This feature is easy to abuse, so please exercise your good sense when doing + it! + +### How to Write Value-Parameterized Tests + +To write value-parameterized tests, first you should define a fixture class. It +must be derived from both `testing::Test` and `testing::WithParamInterface` +(the latter is a pure interface), where `T` is the type of your parameter +values. For convenience, you can just derive the fixture class from +`testing::TestWithParam`, which itself is derived from both `testing::Test` +and `testing::WithParamInterface`. `T` can be any copyable type. If it's a +raw pointer, you are responsible for managing the lifespan of the pointed +values. + +{: .callout .note} +NOTE: If your test fixture defines `SetUpTestSuite()` or `TearDownTestSuite()` +they must be declared **public** rather than **protected** in order to use +`TEST_P`. + +```c++ +class FooTest : + public testing::TestWithParam { + // You can implement all the usual fixture class members here. + // To access the test parameter, call GetParam() from class + // TestWithParam. +}; + +// Or, when you want to add parameters to a pre-existing fixture class: +class BaseTest : public testing::Test { + ... +}; +class BarTest : public BaseTest, + public testing::WithParamInterface { + ... +}; +``` + +Then, use the `TEST_P` macro to define as many test patterns using this fixture +as you want. The `_P` suffix is for "parameterized" or "pattern", whichever you +prefer to think. + +```c++ +TEST_P(FooTest, DoesBlah) { + // Inside a test, access the test parameter with the GetParam() method + // of the TestWithParam class: + EXPECT_TRUE(foo.Blah(GetParam())); + ... +} + +TEST_P(FooTest, HasBlahBlah) { + ... +} +``` + +Finally, you can use the `INSTANTIATE_TEST_SUITE_P` macro to instantiate the +test suite with any set of parameters you want. GoogleTest defines a number of +functions for generating test parameters—see details at +[`INSTANTIATE_TEST_SUITE_P`](reference/testing.md#INSTANTIATE_TEST_SUITE_P) in +the Testing Reference. + +For example, the following statement will instantiate tests from the `FooTest` +test suite each with parameter values `"meeny"`, `"miny"`, and `"moe"` using the +[`Values`](reference/testing.md#param-generators) parameter generator: + +```c++ +INSTANTIATE_TEST_SUITE_P(MeenyMinyMoe, + FooTest, + testing::Values("meeny", "miny", "moe")); +``` + +{: .callout .note} +NOTE: The code above must be placed at global or namespace scope, not at +function scope. + +The first argument to `INSTANTIATE_TEST_SUITE_P` is a unique name for the +instantiation of the test suite. The next argument is the name of the test +pattern, and the last is the +[parameter generator](reference/testing.md#param-generators). + +You can instantiate a test pattern more than once, so to distinguish different +instances of the pattern, the instantiation name is added as a prefix to the +actual test suite name. Remember to pick unique prefixes for different +instantiations. The tests from the instantiation above will have these names: + +* `MeenyMinyMoe/FooTest.DoesBlah/0` for `"meeny"` +* `MeenyMinyMoe/FooTest.DoesBlah/1` for `"miny"` +* `MeenyMinyMoe/FooTest.DoesBlah/2` for `"moe"` +* `MeenyMinyMoe/FooTest.HasBlahBlah/0` for `"meeny"` +* `MeenyMinyMoe/FooTest.HasBlahBlah/1` for `"miny"` +* `MeenyMinyMoe/FooTest.HasBlahBlah/2` for `"moe"` + +You can use these names in [`--gtest_filter`](#running-a-subset-of-the-tests). + +The following statement will instantiate all tests from `FooTest` again, each +with parameter values `"cat"` and `"dog"` using the +[`ValuesIn`](reference/testing.md#param-generators) parameter generator: + +```c++ +const char* pets[] = {"cat", "dog"}; +INSTANTIATE_TEST_SUITE_P(Pets, FooTest, testing::ValuesIn(pets)); +``` + +The tests from the instantiation above will have these names: + +* `Pets/FooTest.DoesBlah/0` for `"cat"` +* `Pets/FooTest.DoesBlah/1` for `"dog"` +* `Pets/FooTest.HasBlahBlah/0` for `"cat"` +* `Pets/FooTest.HasBlahBlah/1` for `"dog"` + +Please note that `INSTANTIATE_TEST_SUITE_P` will instantiate *all* tests in the +given test suite, whether their definitions come before or *after* the +`INSTANTIATE_TEST_SUITE_P` statement. + +Additionally, by default, every `TEST_P` without a corresponding +`INSTANTIATE_TEST_SUITE_P` causes a failing test in test suite +`GoogleTestVerification`. If you have a test suite where that omission is not an +error, for example it is in a library that may be linked in for other reasons or +where the list of test cases is dynamic and may be empty, then this check can be +suppressed by tagging the test suite: + +```c++ +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(FooTest); +``` + +You can see [sample7_unittest.cc] and [sample8_unittest.cc] for more examples. + +[sample7_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample7_unittest.cc "Parameterized Test example" +[sample8_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample8_unittest.cc "Parameterized Test example with multiple parameters" + +### Creating Value-Parameterized Abstract Tests + +In the above, we define and instantiate `FooTest` in the *same* source file. +Sometimes you may want to define value-parameterized tests in a library and let +other people instantiate them later. This pattern is known as *abstract tests*. +As an example of its application, when you are designing an interface you can +write a standard suite of abstract tests (perhaps using a factory function as +the test parameter) that all implementations of the interface are expected to +pass. When someone implements the interface, they can instantiate your suite to +get all the interface-conformance tests for free. + +To define abstract tests, you should organize your code like this: + +1. Put the definition of the parameterized test fixture class (e.g. `FooTest`) + in a header file, say `foo_param_test.h`. Think of this as *declaring* your + abstract tests. +2. Put the `TEST_P` definitions in `foo_param_test.cc`, which includes + `foo_param_test.h`. Think of this as *implementing* your abstract tests. + +Once they are defined, you can instantiate them by including `foo_param_test.h`, +invoking `INSTANTIATE_TEST_SUITE_P()`, and depending on the library target that +contains `foo_param_test.cc`. You can instantiate the same abstract test suite +multiple times, possibly in different source files. + +### Specifying Names for Value-Parameterized Test Parameters + +The optional last argument to `INSTANTIATE_TEST_SUITE_P()` allows the user to +specify a function or functor that generates custom test name suffixes based on +the test parameters. The function should accept one argument of type +`testing::TestParamInfo`, and return `std::string`. + +`testing::PrintToStringParamName` is a builtin test suffix generator that +returns the value of `testing::PrintToString(GetParam())`. It does not work for +`std::string` or C strings. + +{: .callout .note} +NOTE: test names must be non-empty, unique, and may only contain ASCII +alphanumeric characters. In particular, they +[should not contain underscores](faq.md#why-should-test-suite-names-and-test-names-not-contain-underscore) + +```c++ +class MyTestSuite : public testing::TestWithParam {}; + +TEST_P(MyTestSuite, MyTest) +{ + std::cout << "Example Test Param: " << GetParam() << std::endl; +} + +INSTANTIATE_TEST_SUITE_P(MyGroup, MyTestSuite, testing::Range(0, 10), + testing::PrintToStringParamName()); +``` + +Providing a custom functor allows for more control over test parameter name +generation, especially for types where the automatic conversion does not +generate helpful parameter names (e.g. strings as demonstrated above). The +following example illustrates this for multiple parameters, an enumeration type +and a string, and also demonstrates how to combine generators. It uses a lambda +for conciseness: + +```c++ +enum class MyType { MY_FOO = 0, MY_BAR = 1 }; + +class MyTestSuite : public testing::TestWithParam> { +}; + +INSTANTIATE_TEST_SUITE_P( + MyGroup, MyTestSuite, + testing::Combine( + testing::Values(MyType::MY_FOO, MyType::MY_BAR), + testing::Values("A", "B")), + [](const testing::TestParamInfo& info) { + std::string name = absl::StrCat( + std::get<0>(info.param) == MyType::MY_FOO ? "Foo" : "Bar", + std::get<1>(info.param)); + absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_'); + return name; + }); +``` + +## Typed Tests + +Suppose you have multiple implementations of the same interface and want to make +sure that all of them satisfy some common requirements. Or, you may have defined +several types that are supposed to conform to the same "concept" and you want to +verify it. In both cases, you want the same test logic repeated for different +types. + +While you can write one `TEST` or `TEST_F` for each type you want to test (and +you may even factor the test logic into a function template that you invoke from +the `TEST`), it's tedious and doesn't scale: if you want `m` tests over `n` +types, you'll end up writing `m*n` `TEST`s. + +*Typed tests* allow you to repeat the same test logic over a list of types. You +only need to write the test logic once, although you must know the type list +when writing typed tests. Here's how you do it: + +First, define a fixture class template. It should be parameterized by a type. +Remember to derive it from `::testing::Test`: + +```c++ +template +class FooTest : public testing::Test { + public: + ... + using List = std::list; + static T shared_; + T value_; +}; +``` + +Next, associate a list of types with the test suite, which will be repeated for +each type in the list: + +```c++ +using MyTypes = ::testing::Types; +TYPED_TEST_SUITE(FooTest, MyTypes); +``` + +The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE` +macro to parse correctly. Otherwise the compiler will think that each comma in +the type list introduces a new macro argument. + +Then, use `TYPED_TEST()` instead of `TEST_F()` to define a typed test for this +test suite. You can repeat this as many times as you want: + +```c++ +TYPED_TEST(FooTest, DoesBlah) { + // Inside a test, refer to the special name TypeParam to get the type + // parameter. Since we are inside a derived class template, C++ requires + // us to visit the members of FooTest via 'this'. + TypeParam n = this->value_; + + // To visit static members of the fixture, add the 'TestFixture::' + // prefix. + n += TestFixture::shared_; + + // To refer to typedefs in the fixture, add the 'typename TestFixture::' + // prefix. The 'typename' is required to satisfy the compiler. + typename TestFixture::List values; + + values.push_back(n); + ... +} + +TYPED_TEST(FooTest, HasPropertyA) { ... } +``` + +You can see [sample6_unittest.cc] for a complete example. + +[sample6_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample6_unittest.cc "Typed Test example" + +## Type-Parameterized Tests + +*Type-parameterized tests* are like typed tests, except that they don't require +you to know the list of types ahead of time. Instead, you can define the test +logic first and instantiate it with different type lists later. You can even +instantiate it more than once in the same program. + +If you are designing an interface or concept, you can define a suite of +type-parameterized tests to verify properties that any valid implementation of +the interface/concept should have. Then, the author of each implementation can +just instantiate the test suite with their type to verify that it conforms to +the requirements, without having to write similar tests repeatedly. Here's an +example: + +First, define a fixture class template, as we did with typed tests: + +```c++ +template +class FooTest : public testing::Test { + ... +}; +``` + +Next, declare that you will define a type-parameterized test suite: + +```c++ +TYPED_TEST_SUITE_P(FooTest); +``` + +Then, use `TYPED_TEST_P()` to define a type-parameterized test. You can repeat +this as many times as you want: + +```c++ +TYPED_TEST_P(FooTest, DoesBlah) { + // Inside a test, refer to TypeParam to get the type parameter. + TypeParam n = 0; + ... +} + +TYPED_TEST_P(FooTest, HasPropertyA) { ... } +``` + +Now the tricky part: you need to register all test patterns using the +`REGISTER_TYPED_TEST_SUITE_P` macro before you can instantiate them. The first +argument of the macro is the test suite name; the rest are the names of the +tests in this test suite: + +```c++ +REGISTER_TYPED_TEST_SUITE_P(FooTest, + DoesBlah, HasPropertyA); +``` + +Finally, you are free to instantiate the pattern with the types you want. If you +put the above code in a header file, you can `#include` it in multiple C++ +source files and instantiate it multiple times. + +```c++ +using MyTypes = ::testing::Types; +INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); +``` + +To distinguish different instances of the pattern, the first argument to the +`INSTANTIATE_TYPED_TEST_SUITE_P` macro is a prefix that will be added to the +actual test suite name. Remember to pick unique prefixes for different +instances. + +In the special case where the type list contains only one type, you can write +that type directly without `::testing::Types<...>`, like this: + +```c++ +INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int); +``` + +You can see [sample6_unittest.cc] for a complete example. + +## Testing Private Code + +If you change your software's internal implementation, your tests should not +break as long as the change is not observable by users. Therefore, **per the +black-box testing principle, most of the time you should test your code through +its public interfaces.** + +**If you still find yourself needing to test internal implementation code, +consider if there's a better design.** The desire to test internal +implementation is often a sign that the class is doing too much. Consider +extracting an implementation class, and testing it. Then use that implementation +class in the original class. + +If you absolutely have to test non-public interface code though, you can. There +are two cases to consider: + +* Static functions ( *not* the same as static member functions!) or unnamed + namespaces, and +* Private or protected class members + +To test them, we use the following special techniques: + +* Both static functions and definitions/declarations in an unnamed namespace + are only visible within the same translation unit. To test them, you can + `#include` the entire `.cc` file being tested in your `*_test.cc` file. + (#including `.cc` files is not a good way to reuse code - you should not do + this in production code!) + + However, a better approach is to move the private code into the + `foo::internal` namespace, where `foo` is the namespace your project + normally uses, and put the private declarations in a `*-internal.h` file. + Your production `.cc` files and your tests are allowed to include this + internal header, but your clients are not. This way, you can fully test your + internal implementation without leaking it to your clients. + +* Private class members are only accessible from within the class or by + friends. To access a class' private members, you can declare your test + fixture as a friend to the class and define accessors in your fixture. Tests + using the fixture can then access the private members of your production + class via the accessors in the fixture. Note that even though your fixture + is a friend to your production class, your tests are not automatically + friends to it, as they are technically defined in sub-classes of the + fixture. + + Another way to test private members is to refactor them into an + implementation class, which is then declared in a `*-internal.h` file. Your + clients aren't allowed to include this header but your tests can. Such is + called the + [Pimpl](https://www.gamedev.net/articles/programming/general-and-gameplay-programming/the-c-pimpl-r1794/) + (Private Implementation) idiom. + + Or, you can declare an individual test as a friend of your class by adding + this line in the class body: + + ```c++ + FRIEND_TEST(TestSuiteName, TestName); + ``` + + For example, + + ```c++ + // foo.h + class Foo { + ... + private: + FRIEND_TEST(FooTest, BarReturnsZeroOnNull); + + int Bar(void* x); + }; + + // foo_test.cc + ... + TEST(FooTest, BarReturnsZeroOnNull) { + Foo foo; + EXPECT_EQ(foo.Bar(NULL), 0); // Uses Foo's private member Bar(). + } + ``` + + Pay special attention when your class is defined in a namespace. If you want + your test fixtures and tests to be friends of your class, then they must be + defined in the exact same namespace (no anonymous or inline namespaces). + + For example, if the code to be tested looks like: + + ```c++ + namespace my_namespace { + + class Foo { + friend class FooTest; + FRIEND_TEST(FooTest, Bar); + FRIEND_TEST(FooTest, Baz); + ... definition of the class Foo ... + }; + + } // namespace my_namespace + ``` + + Your test code should be something like: + + ```c++ + namespace my_namespace { + + class FooTest : public testing::Test { + protected: + ... + }; + + TEST_F(FooTest, Bar) { ... } + TEST_F(FooTest, Baz) { ... } + + } // namespace my_namespace + ``` + +## "Catching" Failures + +If you are building a testing utility on top of googletest, you'll want to test +your utility. What framework would you use to test it? googletest, of course. + +The challenge is to verify that your testing utility reports failures correctly. +In frameworks that report a failure by throwing an exception, you could catch +the exception and assert on it. But googletest doesn't use exceptions, so how do +we test that a piece of code generates an expected failure? + +`"gtest/gtest-spi.h"` contains some constructs to do this. After #including this header, +you can use + +```c++ + EXPECT_FATAL_FAILURE(statement, substring); +``` + +to assert that `statement` generates a fatal (e.g. `ASSERT_*`) failure in the +current thread whose message contains the given `substring`, or use + +```c++ + EXPECT_NONFATAL_FAILURE(statement, substring); +``` + +if you are expecting a non-fatal (e.g. `EXPECT_*`) failure. + +Only failures in the current thread are checked to determine the result of this +type of expectations. If `statement` creates new threads, failures in these +threads are also ignored. If you want to catch failures in other threads as +well, use one of the following macros instead: + +```c++ + EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substring); + EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substring); +``` + +{: .callout .note} +NOTE: Assertions from multiple threads are currently not supported on Windows. + +For technical reasons, there are some caveats: + +1. You cannot stream a failure message to either macro. + +2. `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot reference + local non-static variables or non-static members of `this` object. + +3. `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot return a + value. + +## Registering tests programmatically + +The `TEST` macros handle the vast majority of all use cases, but there are few +where runtime registration logic is required. For those cases, the framework +provides the `::testing::RegisterTest` that allows callers to register arbitrary +tests dynamically. + +This is an advanced API only to be used when the `TEST` macros are insufficient. +The macros should be preferred when possible, as they avoid most of the +complexity of calling this function. + +It provides the following signature: + +```c++ +template +TestInfo* RegisterTest(const char* test_suite_name, const char* test_name, + const char* type_param, const char* value_param, + const char* file, int line, Factory factory); +``` + +The `factory` argument is a factory callable (move-constructible) object or +function pointer that creates a new instance of the Test object. It handles +ownership to the caller. The signature of the callable is `Fixture*()`, where +`Fixture` is the test fixture class for the test. All tests registered with the +same `test_suite_name` must return the same fixture type. This is checked at +runtime. + +The framework will infer the fixture class from the factory and will call the +`SetUpTestSuite` and `TearDownTestSuite` for it. + +Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is +undefined. + +Use case example: + +```c++ +class MyFixture : public testing::Test { + public: + // All of these optional, just like in regular macro usage. + static void SetUpTestSuite() { ... } + static void TearDownTestSuite() { ... } + void SetUp() override { ... } + void TearDown() override { ... } +}; + +class MyTest : public MyFixture { + public: + explicit MyTest(int data) : data_(data) {} + void TestBody() override { ... } + + private: + int data_; +}; + +void RegisterMyTests(const std::vector& values) { + for (int v : values) { + testing::RegisterTest( + "MyFixture", ("Test" + std::to_string(v)).c_str(), nullptr, + std::to_string(v).c_str(), + __FILE__, __LINE__, + // Important to use the fixture type as the return type here. + [=]() -> MyFixture* { return new MyTest(v); }); + } +} +... +int main(int argc, char** argv) { + std::vector values_to_test = LoadValuesFromConfig(); + RegisterMyTests(values_to_test); + ... + return RUN_ALL_TESTS(); +} +``` +## Getting the Current Test's Name + +Sometimes a function may need to know the name of the currently running test. +For example, you may be using the `SetUp()` method of your test fixture to set +the golden file name based on which test is running. The +[`TestInfo`](reference/testing.md#TestInfo) class has this information. + +To obtain a `TestInfo` object for the currently running test, call +`current_test_info()` on the [`UnitTest`](reference/testing.md#UnitTest) +singleton object: + +```c++ + // Gets information about the currently running test. + // Do NOT delete the returned object - it's managed by the UnitTest class. + const testing::TestInfo* const test_info = + testing::UnitTest::GetInstance()->current_test_info(); + + printf("We are in test %s of test suite %s.\n", + test_info->name(), + test_info->test_suite_name()); +``` + +`current_test_info()` returns a null pointer if no test is running. In +particular, you cannot find the test suite name in `SetUpTestSuite()`, +`TearDownTestSuite()` (where you know the test suite name implicitly), or +functions called from them. + +## Extending googletest by Handling Test Events + +googletest provides an **event listener API** to let you receive notifications +about the progress of a test program and test failures. The events you can +listen to include the start and end of the test program, a test suite, or a test +method, among others. You may use this API to augment or replace the standard +console output, replace the XML output, or provide a completely different form +of output, such as a GUI or a database. You can also use test events as +checkpoints to implement a resource leak checker, for example. + +### Defining Event Listeners + +To define a event listener, you subclass either +[`testing::TestEventListener`](reference/testing.md#TestEventListener) or +[`testing::EmptyTestEventListener`](reference/testing.md#EmptyTestEventListener) +The former is an (abstract) interface, where *each pure virtual method can be +overridden to handle a test event* (For example, when a test starts, the +`OnTestStart()` method will be called.). The latter provides an empty +implementation of all methods in the interface, such that a subclass only needs +to override the methods it cares about. + +When an event is fired, its context is passed to the handler function as an +argument. The following argument types are used: + +* UnitTest reflects the state of the entire test program, +* TestSuite has information about a test suite, which can contain one or more + tests, +* TestInfo contains the state of a test, and +* TestPartResult represents the result of a test assertion. + +An event handler function can examine the argument it receives to find out +interesting information about the event and the test program's state. + +Here's an example: + +```c++ + class MinimalistPrinter : public testing::EmptyTestEventListener { + // Called before a test starts. + void OnTestStart(const testing::TestInfo& test_info) override { + printf("*** Test %s.%s starting.\n", + test_info.test_suite_name(), test_info.name()); + } + + // Called after a failed assertion or a SUCCESS(). + void OnTestPartResult(const testing::TestPartResult& test_part_result) override { + printf("%s in %s:%d\n%s\n", + test_part_result.failed() ? "*** Failure" : "Success", + test_part_result.file_name(), + test_part_result.line_number(), + test_part_result.summary()); + } + + // Called after a test ends. + void OnTestEnd(const testing::TestInfo& test_info) override { + printf("*** Test %s.%s ending.\n", + test_info.test_suite_name(), test_info.name()); + } + }; +``` + +### Using Event Listeners + +To use the event listener you have defined, add an instance of it to the +googletest event listener list (represented by class +[`TestEventListeners`](reference/testing.md#TestEventListeners) - note the "s" +at the end of the name) in your `main()` function, before calling +`RUN_ALL_TESTS()`: + +```c++ +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + // Gets hold of the event listener list. + testing::TestEventListeners& listeners = + testing::UnitTest::GetInstance()->listeners(); + // Adds a listener to the end. googletest takes the ownership. + listeners.Append(new MinimalistPrinter); + return RUN_ALL_TESTS(); +} +``` + +There's only one problem: the default test result printer is still in effect, so +its output will mingle with the output from your minimalist printer. To suppress +the default printer, just release it from the event listener list and delete it. +You can do so by adding one line: + +```c++ + ... + delete listeners.Release(listeners.default_result_printer()); + listeners.Append(new MinimalistPrinter); + return RUN_ALL_TESTS(); +``` + +Now, sit back and enjoy a completely different output from your tests. For more +details, see [sample9_unittest.cc]. + +[sample9_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample9_unittest.cc "Event listener example" + +You may append more than one listener to the list. When an `On*Start()` or +`OnTestPartResult()` event is fired, the listeners will receive it in the order +they appear in the list (since new listeners are added to the end of the list, +the default text printer and the default XML generator will receive the event +first). An `On*End()` event will be received by the listeners in the *reverse* +order. This allows output by listeners added later to be framed by output from +listeners added earlier. + +### Generating Failures in Listeners + +You may use failure-raising macros (`EXPECT_*()`, `ASSERT_*()`, `FAIL()`, etc) +when processing an event. There are some restrictions: + +1. You cannot generate any failure in `OnTestPartResult()` (otherwise it will + cause `OnTestPartResult()` to be called recursively). +2. A listener that handles `OnTestPartResult()` is not allowed to generate any + failure. + +When you add listeners to the listener list, you should put listeners that +handle `OnTestPartResult()` *before* listeners that can generate failures. This +ensures that failures generated by the latter are attributed to the right test +by the former. + +See [sample10_unittest.cc] for an example of a failure-raising listener. + +[sample10_unittest.cc]: https://github.com/google/googletest/blob/master/googletest/samples/sample10_unittest.cc "Failure-raising listener example" + +## Running Test Programs: Advanced Options + +googletest test programs are ordinary executables. Once built, you can run them +directly and affect their behavior via the following environment variables +and/or command line flags. For the flags to work, your programs must call +`::testing::InitGoogleTest()` before calling `RUN_ALL_TESTS()`. + +To see a list of supported flags and their usage, please run your test program +with the `--help` flag. You can also use `-h`, `-?`, or `/?` for short. + +If an option is specified both by an environment variable and by a flag, the +latter takes precedence. + +### Selecting Tests + +#### Listing Test Names + +Sometimes it is necessary to list the available tests in a program before +running them so that a filter may be applied if needed. Including the flag +`--gtest_list_tests` overrides all other flags and lists tests in the following +format: + +```none +TestSuite1. + TestName1 + TestName2 +TestSuite2. + TestName +``` + +None of the tests listed are actually run if the flag is provided. There is no +corresponding environment variable for this flag. + +#### Running a Subset of the Tests + +By default, a googletest program runs all tests the user has defined. Sometimes, +you want to run only a subset of the tests (e.g. for debugging or quickly +verifying a change). If you set the `GTEST_FILTER` environment variable or the +`--gtest_filter` flag to a filter string, googletest will only run the tests +whose full names (in the form of `TestSuiteName.TestName`) match the filter. + +The format of a filter is a '`:`'-separated list of wildcard patterns (called +the *positive patterns*) optionally followed by a '`-`' and another +'`:`'-separated pattern list (called the *negative patterns*). A test matches +the filter if and only if it matches any of the positive patterns but does not +match any of the negative patterns. + +A pattern may contain `'*'` (matches any string) or `'?'` (matches any single +character). For convenience, the filter `'*-NegativePatterns'` can be also +written as `'-NegativePatterns'`. + +For example: + +* `./foo_test` Has no flag, and thus runs all its tests. +* `./foo_test --gtest_filter=*` Also runs everything, due to the single + match-everything `*` value. +* `./foo_test --gtest_filter=FooTest.*` Runs everything in test suite + `FooTest` . +* `./foo_test --gtest_filter=*Null*:*Constructor*` Runs any test whose full + name contains either `"Null"` or `"Constructor"` . +* `./foo_test --gtest_filter=-*DeathTest.*` Runs all non-death tests. +* `./foo_test --gtest_filter=FooTest.*-FooTest.Bar` Runs everything in test + suite `FooTest` except `FooTest.Bar`. +* `./foo_test --gtest_filter=FooTest.*:BarTest.*-FooTest.Bar:BarTest.Foo` Runs + everything in test suite `FooTest` except `FooTest.Bar` and everything in + test suite `BarTest` except `BarTest.Foo`. + +#### Stop test execution upon first failure + +By default, a googletest program runs all tests the user has defined. In some +cases (e.g. iterative test development & execution) it may be desirable stop +test execution upon first failure (trading improved latency for completeness). +If `GTEST_FAIL_FAST` environment variable or `--gtest_fail_fast` flag is set, +the test runner will stop execution as soon as the first test failure is +found. + +#### Temporarily Disabling Tests + +If you have a broken test that you cannot fix right away, you can add the +`DISABLED_` prefix to its name. This will exclude it from execution. This is +better than commenting out the code or using `#if 0`, as disabled tests are +still compiled (and thus won't rot). + +If you need to disable all tests in a test suite, you can either add `DISABLED_` +to the front of the name of each test, or alternatively add it to the front of +the test suite name. + +For example, the following tests won't be run by googletest, even though they +will still be compiled: + +```c++ +// Tests that Foo does Abc. +TEST(FooTest, DISABLED_DoesAbc) { ... } + +class DISABLED_BarTest : public testing::Test { ... }; + +// Tests that Bar does Xyz. +TEST_F(DISABLED_BarTest, DoesXyz) { ... } +``` + +{: .callout .note} +NOTE: This feature should only be used for temporary pain-relief. You still have +to fix the disabled tests at a later date. As a reminder, googletest will print +a banner warning you if a test program contains any disabled tests. + +{: .callout .tip} +TIP: You can easily count the number of disabled tests you have using +`grep`. This number can be used as a metric for +improving your test quality. + +#### Temporarily Enabling Disabled Tests + +To include disabled tests in test execution, just invoke the test program with +the `--gtest_also_run_disabled_tests` flag or set the +`GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other than `0`. +You can combine this with the `--gtest_filter` flag to further select which +disabled tests to run. + +### Repeating the Tests + +Once in a while you'll run into a test whose result is hit-or-miss. Perhaps it +will fail only 1% of the time, making it rather hard to reproduce the bug under +a debugger. This can be a major source of frustration. + +The `--gtest_repeat` flag allows you to repeat all (or selected) test methods in +a program many times. Hopefully, a flaky test will eventually fail and give you +a chance to debug. Here's how to use it: + +```none +$ foo_test --gtest_repeat=1000 +Repeat foo_test 1000 times and don't stop at failures. + +$ foo_test --gtest_repeat=-1 +A negative count means repeating forever. + +$ foo_test --gtest_repeat=1000 --gtest_break_on_failure +Repeat foo_test 1000 times, stopping at the first failure. This +is especially useful when running under a debugger: when the test +fails, it will drop into the debugger and you can then inspect +variables and stacks. + +$ foo_test --gtest_repeat=1000 --gtest_filter=FooBar.* +Repeat the tests whose name matches the filter 1000 times. +``` + +If your test program contains +[global set-up/tear-down](#global-set-up-and-tear-down) code, it will be +repeated in each iteration as well, as the flakiness may be in it. You can also +specify the repeat count by setting the `GTEST_REPEAT` environment variable. + +### Shuffling the Tests + +You can specify the `--gtest_shuffle` flag (or set the `GTEST_SHUFFLE` +environment variable to `1`) to run the tests in a program in a random order. +This helps to reveal bad dependencies between tests. + +By default, googletest uses a random seed calculated from the current time. +Therefore you'll get a different order every time. The console output includes +the random seed value, such that you can reproduce an order-related test failure +later. To specify the random seed explicitly, use the `--gtest_random_seed=SEED` +flag (or set the `GTEST_RANDOM_SEED` environment variable), where `SEED` is an +integer in the range [0, 99999]. The seed value 0 is special: it tells +googletest to do the default behavior of calculating the seed from the current +time. + +If you combine this with `--gtest_repeat=N`, googletest will pick a different +random seed and re-shuffle the tests in each iteration. + +### Controlling Test Output + +#### Colored Terminal Output + +googletest can use colors in its terminal output to make it easier to spot the +important information: + +
...
+[----------] 1 test from FooTest
+[ RUN      ] FooTest.DoesAbc
+[       OK ] FooTest.DoesAbc
+[----------] 2 tests from BarTest
+[ RUN      ] BarTest.HasXyzProperty
+[       OK ] BarTest.HasXyzProperty
+[ RUN      ] BarTest.ReturnsTrueOnSuccess
+... some error messages ...
+[   FAILED ] BarTest.ReturnsTrueOnSuccess
+...
+[==========] 30 tests from 14 test suites ran.
+[   PASSED ] 28 tests.
+[   FAILED ] 2 tests, listed below:
+[   FAILED ] BarTest.ReturnsTrueOnSuccess
+[   FAILED ] AnotherTest.DoesXyz
+
+ 2 FAILED TESTS
+
+ +You can set the `GTEST_COLOR` environment variable or the `--gtest_color` +command line flag to `yes`, `no`, or `auto` (the default) to enable colors, +disable colors, or let googletest decide. When the value is `auto`, googletest +will use colors if and only if the output goes to a terminal and (on non-Windows +platforms) the `TERM` environment variable is set to `xterm` or `xterm-color`. + +#### Suppressing test passes + +By default, googletest prints 1 line of output for each test, indicating if it +passed or failed. To show only test failures, run the test program with +`--gtest_brief=1`, or set the GTEST_BRIEF environment variable to `1`. + +#### Suppressing the Elapsed Time + +By default, googletest prints the time it takes to run each test. To disable +that, run the test program with the `--gtest_print_time=0` command line flag, or +set the GTEST_PRINT_TIME environment variable to `0`. + +#### Suppressing UTF-8 Text Output + +In case of assertion failures, googletest prints expected and actual values of +type `string` both as hex-encoded strings as well as in readable UTF-8 text if +they contain valid non-ASCII UTF-8 characters. If you want to suppress the UTF-8 +text because, for example, you don't have an UTF-8 compatible output medium, run +the test program with `--gtest_print_utf8=0` or set the `GTEST_PRINT_UTF8` +environment variable to `0`. + + + +#### Generating an XML Report + +googletest can emit a detailed XML report to a file in addition to its normal +textual output. The report contains the duration of each test, and thus can help +you identify slow tests. + +To generate the XML report, set the `GTEST_OUTPUT` environment variable or the +`--gtest_output` flag to the string `"xml:path_to_output_file"`, which will +create the file at the given location. You can also just use the string `"xml"`, +in which case the output can be found in the `test_detail.xml` file in the +current directory. + +If you specify a directory (for example, `"xml:output/directory/"` on Linux or +`"xml:output\directory\"` on Windows), googletest will create the XML file in +that directory, named after the test executable (e.g. `foo_test.xml` for test +program `foo_test` or `foo_test.exe`). If the file already exists (perhaps left +over from a previous run), googletest will pick a different name (e.g. +`foo_test_1.xml`) to avoid overwriting it. + +The report is based on the `junitreport` Ant task. Since that format was +originally intended for Java, a little interpretation is required to make it +apply to googletest tests, as shown here: + +```xml + + + + + + + + + +``` + +* The root `` element corresponds to the entire test program. +* `` elements correspond to googletest test suites. +* `` elements correspond to googletest test functions. + +For instance, the following program + +```c++ +TEST(MathTest, Addition) { ... } +TEST(MathTest, Subtraction) { ... } +TEST(LogicTest, NonContradiction) { ... } +``` + +could generate this report: + +```xml + + + + + ... + ... + + + + + + + + + +``` + +Things to note: + +* The `tests` attribute of a `` or `` element tells how + many test functions the googletest program or test suite contains, while the + `failures` attribute tells how many of them failed. + +* The `time` attribute expresses the duration of the test, test suite, or + entire test program in seconds. + +* The `timestamp` attribute records the local date and time of the test + execution. + +* Each `` element corresponds to a single failed googletest + assertion. + +#### Generating a JSON Report + +googletest can also emit a JSON report as an alternative format to XML. To +generate the JSON report, set the `GTEST_OUTPUT` environment variable or the +`--gtest_output` flag to the string `"json:path_to_output_file"`, which will +create the file at the given location. You can also just use the string +`"json"`, in which case the output can be found in the `test_detail.json` file +in the current directory. + +The report format conforms to the following JSON Schema: + +```json +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "definitions": { + "TestCase": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "tests": { "type": "integer" }, + "failures": { "type": "integer" }, + "disabled": { "type": "integer" }, + "time": { "type": "string" }, + "testsuite": { + "type": "array", + "items": { + "$ref": "#/definitions/TestInfo" + } + } + } + }, + "TestInfo": { + "type": "object", + "properties": { + "name": { "type": "string" }, + "status": { + "type": "string", + "enum": ["RUN", "NOTRUN"] + }, + "time": { "type": "string" }, + "classname": { "type": "string" }, + "failures": { + "type": "array", + "items": { + "$ref": "#/definitions/Failure" + } + } + } + }, + "Failure": { + "type": "object", + "properties": { + "failures": { "type": "string" }, + "type": { "type": "string" } + } + } + }, + "properties": { + "tests": { "type": "integer" }, + "failures": { "type": "integer" }, + "disabled": { "type": "integer" }, + "errors": { "type": "integer" }, + "timestamp": { + "type": "string", + "format": "date-time" + }, + "time": { "type": "string" }, + "name": { "type": "string" }, + "testsuites": { + "type": "array", + "items": { + "$ref": "#/definitions/TestCase" + } + } + } +} +``` + +The report uses the format that conforms to the following Proto3 using the +[JSON encoding](https://developers.google.com/protocol-buffers/docs/proto3#json): + +```proto +syntax = "proto3"; + +package googletest; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; + +message UnitTest { + int32 tests = 1; + int32 failures = 2; + int32 disabled = 3; + int32 errors = 4; + google.protobuf.Timestamp timestamp = 5; + google.protobuf.Duration time = 6; + string name = 7; + repeated TestCase testsuites = 8; +} + +message TestCase { + string name = 1; + int32 tests = 2; + int32 failures = 3; + int32 disabled = 4; + int32 errors = 5; + google.protobuf.Duration time = 6; + repeated TestInfo testsuite = 7; +} + +message TestInfo { + string name = 1; + enum Status { + RUN = 0; + NOTRUN = 1; + } + Status status = 2; + google.protobuf.Duration time = 3; + string classname = 4; + message Failure { + string failures = 1; + string type = 2; + } + repeated Failure failures = 5; +} +``` + +For instance, the following program + +```c++ +TEST(MathTest, Addition) { ... } +TEST(MathTest, Subtraction) { ... } +TEST(LogicTest, NonContradiction) { ... } +``` + +could generate this report: + +```json +{ + "tests": 3, + "failures": 1, + "errors": 0, + "time": "0.035s", + "timestamp": "2011-10-31T18:52:42Z", + "name": "AllTests", + "testsuites": [ + { + "name": "MathTest", + "tests": 2, + "failures": 1, + "errors": 0, + "time": "0.015s", + "testsuite": [ + { + "name": "Addition", + "status": "RUN", + "time": "0.007s", + "classname": "", + "failures": [ + { + "message": "Value of: add(1, 1)\n Actual: 3\nExpected: 2", + "type": "" + }, + { + "message": "Value of: add(1, -1)\n Actual: 1\nExpected: 0", + "type": "" + } + ] + }, + { + "name": "Subtraction", + "status": "RUN", + "time": "0.005s", + "classname": "" + } + ] + }, + { + "name": "LogicTest", + "tests": 1, + "failures": 0, + "errors": 0, + "time": "0.005s", + "testsuite": [ + { + "name": "NonContradiction", + "status": "RUN", + "time": "0.005s", + "classname": "" + } + ] + } + ] +} +``` + +{: .callout .important} +IMPORTANT: The exact format of the JSON document is subject to change. + +### Controlling How Failures Are Reported + +#### Detecting Test Premature Exit + +Google Test implements the _premature-exit-file_ protocol for test runners +to catch any kind of unexpected exits of test programs. Upon start, +Google Test creates the file which will be automatically deleted after +all work has been finished. Then, the test runner can check if this file +exists. In case the file remains undeleted, the inspected test has exited +prematurely. + +This feature is enabled only if the `TEST_PREMATURE_EXIT_FILE` environment +variable has been set. + +#### Turning Assertion Failures into Break-Points + +When running test programs under a debugger, it's very convenient if the +debugger can catch an assertion failure and automatically drop into interactive +mode. googletest's *break-on-failure* mode supports this behavior. + +To enable it, set the `GTEST_BREAK_ON_FAILURE` environment variable to a value +other than `0`. Alternatively, you can use the `--gtest_break_on_failure` +command line flag. + +#### Disabling Catching Test-Thrown Exceptions + +googletest can be used either with or without exceptions enabled. If a test +throws a C++ exception or (on Windows) a structured exception (SEH), by default +googletest catches it, reports it as a test failure, and continues with the next +test method. This maximizes the coverage of a test run. Also, on Windows an +uncaught exception will cause a pop-up window, so catching the exceptions allows +you to run the tests automatically. + +When debugging the test failures, however, you may instead want the exceptions +to be handled by the debugger, such that you can examine the call stack when an +exception is thrown. To achieve that, set the `GTEST_CATCH_EXCEPTIONS` +environment variable to `0`, or use the `--gtest_catch_exceptions=0` flag when +running the tests. + +### Sanitizer Integration + +The +[Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html), +[Address Sanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer), +and +[Thread Sanitizer](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual) +all provide weak functions that you can override to trigger explicit failures +when they detect sanitizer errors, such as creating a reference from `nullptr`. +To override these functions, place definitions for them in a source file that +you compile as part of your main binary: + +``` +extern "C" { +void __ubsan_on_report() { + FAIL() << "Encountered an undefined behavior sanitizer error"; +} +void __asan_on_error() { + FAIL() << "Encountered an address sanitizer error"; +} +void __tsan_on_report() { + FAIL() << "Encountered a thread sanitizer error"; +} +} // extern "C" +``` + +After compiling your project with one of the sanitizers enabled, if a particular +test triggers a sanitizer error, googletest will report that it failed. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss b/_codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss new file mode 100644 index 0000000..bb30f41 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/assets/css/style.scss @@ -0,0 +1,5 @@ +--- +--- + +@import "jekyll-theme-primer"; +@import "main"; diff --git a/_codeql_build_dir/_deps/googletest-src/docs/community_created_documentation.md b/_codeql_build_dir/_deps/googletest-src/docs/community_created_documentation.md new file mode 100644 index 0000000..4569075 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/community_created_documentation.md @@ -0,0 +1,7 @@ +# Community-Created Documentation + +The following is a list, in no particular order, of links to documentation +created by the Googletest community. + +* [Googlemock Insights](https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/googletest/insights.md), + by [ElectricRCAircraftGuy](https://github.com/ElectricRCAircraftGuy) diff --git a/_codeql_build_dir/_deps/googletest-src/docs/faq.md b/_codeql_build_dir/_deps/googletest-src/docs/faq.md new file mode 100644 index 0000000..9042da1 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/faq.md @@ -0,0 +1,693 @@ +# Googletest FAQ + +## Why should test suite names and test names not contain underscore? + +{: .callout .note} +Note: Googletest reserves underscore (`_`) for special purpose keywords, such as +[the `DISABLED_` prefix](advanced.md#temporarily-disabling-tests), in addition +to the following rationale. + +Underscore (`_`) is special, as C++ reserves the following to be used by the +compiler and the standard library: + +1. any identifier that starts with an `_` followed by an upper-case letter, and +2. any identifier that contains two consecutive underscores (i.e. `__`) + *anywhere* in its name. + +User code is *prohibited* from using such identifiers. + +Now let's look at what this means for `TEST` and `TEST_F`. + +Currently `TEST(TestSuiteName, TestName)` generates a class named +`TestSuiteName_TestName_Test`. What happens if `TestSuiteName` or `TestName` +contains `_`? + +1. If `TestSuiteName` starts with an `_` followed by an upper-case letter (say, + `_Foo`), we end up with `_Foo_TestName_Test`, which is reserved and thus + invalid. +2. If `TestSuiteName` ends with an `_` (say, `Foo_`), we get + `Foo__TestName_Test`, which is invalid. +3. If `TestName` starts with an `_` (say, `_Bar`), we get + `TestSuiteName__Bar_Test`, which is invalid. +4. If `TestName` ends with an `_` (say, `Bar_`), we get + `TestSuiteName_Bar__Test`, which is invalid. + +So clearly `TestSuiteName` and `TestName` cannot start or end with `_` +(Actually, `TestSuiteName` can start with `_` -- as long as the `_` isn't +followed by an upper-case letter. But that's getting complicated. So for +simplicity we just say that it cannot start with `_`.). + +It may seem fine for `TestSuiteName` and `TestName` to contain `_` in the +middle. However, consider this: + +```c++ +TEST(Time, Flies_Like_An_Arrow) { ... } +TEST(Time_Flies, Like_An_Arrow) { ... } +``` + +Now, the two `TEST`s will both generate the same class +(`Time_Flies_Like_An_Arrow_Test`). That's not good. + +So for simplicity, we just ask the users to avoid `_` in `TestSuiteName` and +`TestName`. The rule is more constraining than necessary, but it's simple and +easy to remember. It also gives googletest some wiggle room in case its +implementation needs to change in the future. + +If you violate the rule, there may not be immediate consequences, but your test +may (just may) break with a new compiler (or a new version of the compiler you +are using) or with a new version of googletest. Therefore it's best to follow +the rule. + +## Why does googletest support `EXPECT_EQ(NULL, ptr)` and `ASSERT_EQ(NULL, ptr)` but not `EXPECT_NE(NULL, ptr)` and `ASSERT_NE(NULL, ptr)`? + +First of all, you can use `nullptr` with each of these macros, e.g. +`EXPECT_EQ(ptr, nullptr)`, `EXPECT_NE(ptr, nullptr)`, `ASSERT_EQ(ptr, nullptr)`, +`ASSERT_NE(ptr, nullptr)`. This is the preferred syntax in the style guide +because `nullptr` does not have the type problems that `NULL` does. + +Due to some peculiarity of C++, it requires some non-trivial template meta +programming tricks to support using `NULL` as an argument of the `EXPECT_XX()` +and `ASSERT_XX()` macros. Therefore we only do it where it's most needed +(otherwise we make the implementation of googletest harder to maintain and more +error-prone than necessary). + +Historically, the `EXPECT_EQ()` macro took the *expected* value as its first +argument and the *actual* value as the second, though this argument order is now +discouraged. It was reasonable that someone wanted +to write `EXPECT_EQ(NULL, some_expression)`, and this indeed was requested +several times. Therefore we implemented it. + +The need for `EXPECT_NE(NULL, ptr)` wasn't nearly as strong. When the assertion +fails, you already know that `ptr` must be `NULL`, so it doesn't add any +information to print `ptr` in this case. That means `EXPECT_TRUE(ptr != NULL)` +works just as well. + +If we were to support `EXPECT_NE(NULL, ptr)`, for consistency we'd have to +support `EXPECT_NE(ptr, NULL)` as well. This means using the template meta +programming tricks twice in the implementation, making it even harder to +understand and maintain. We believe the benefit doesn't justify the cost. + +Finally, with the growth of the gMock matcher library, we are encouraging people +to use the unified `EXPECT_THAT(value, matcher)` syntax more often in tests. One +significant advantage of the matcher approach is that matchers can be easily +combined to form new matchers, while the `EXPECT_NE`, etc, macros cannot be +easily combined. Therefore we want to invest more in the matchers than in the +`EXPECT_XX()` macros. + +## I need to test that different implementations of an interface satisfy some common requirements. Should I use typed tests or value-parameterized tests? + +For testing various implementations of the same interface, either typed tests or +value-parameterized tests can get it done. It's really up to you the user to +decide which is more convenient for you, depending on your particular case. Some +rough guidelines: + +* Typed tests can be easier to write if instances of the different + implementations can be created the same way, modulo the type. For example, + if all these implementations have a public default constructor (such that + you can write `new TypeParam`), or if their factory functions have the same + form (e.g. `CreateInstance()`). +* Value-parameterized tests can be easier to write if you need different code + patterns to create different implementations' instances, e.g. `new Foo` vs + `new Bar(5)`. To accommodate for the differences, you can write factory + function wrappers and pass these function pointers to the tests as their + parameters. +* When a typed test fails, the default output includes the name of the type, + which can help you quickly identify which implementation is wrong. + Value-parameterized tests only show the number of the failed iteration by + default. You will need to define a function that returns the iteration name + and pass it as the third parameter to INSTANTIATE_TEST_SUITE_P to have more + useful output. +* When using typed tests, you need to make sure you are testing against the + interface type, not the concrete types (in other words, you want to make + sure `implicit_cast(my_concrete_impl)` works, not just that + `my_concrete_impl` works). It's less likely to make mistakes in this area + when using value-parameterized tests. + +I hope I didn't confuse you more. :-) If you don't mind, I'd suggest you to give +both approaches a try. Practice is a much better way to grasp the subtle +differences between the two tools. Once you have some concrete experience, you +can much more easily decide which one to use the next time. + +## I got some run-time errors about invalid proto descriptors when using `ProtocolMessageEquals`. Help! + +{: .callout .note} +**Note:** `ProtocolMessageEquals` and `ProtocolMessageEquiv` are *deprecated* +now. Please use `EqualsProto`, etc instead. + +`ProtocolMessageEquals` and `ProtocolMessageEquiv` were redefined recently and +are now less tolerant of invalid protocol buffer definitions. In particular, if +you have a `foo.proto` that doesn't fully qualify the type of a protocol message +it references (e.g. `message` where it should be `message`), you +will now get run-time errors like: + +``` +... descriptor.cc:...] Invalid proto descriptor for file "path/to/foo.proto": +... descriptor.cc:...] blah.MyMessage.my_field: ".Bar" is not defined. +``` + +If you see this, your `.proto` file is broken and needs to be fixed by making +the types fully qualified. The new definition of `ProtocolMessageEquals` and +`ProtocolMessageEquiv` just happen to reveal your bug. + +## My death test modifies some state, but the change seems lost after the death test finishes. Why? + +Death tests (`EXPECT_DEATH`, etc) are executed in a sub-process s.t. the +expected crash won't kill the test program (i.e. the parent process). As a +result, any in-memory side effects they incur are observable in their respective +sub-processes, but not in the parent process. You can think of them as running +in a parallel universe, more or less. + +In particular, if you use mocking and the death test statement invokes some mock +methods, the parent process will think the calls have never occurred. Therefore, +you may want to move your `EXPECT_CALL` statements inside the `EXPECT_DEATH` +macro. + +## EXPECT_EQ(htonl(blah), blah_blah) generates weird compiler errors in opt mode. Is this a googletest bug? + +Actually, the bug is in `htonl()`. + +According to `'man htonl'`, `htonl()` is a *function*, which means it's valid to +use `htonl` as a function pointer. However, in opt mode `htonl()` is defined as +a *macro*, which breaks this usage. + +Worse, the macro definition of `htonl()` uses a `gcc` extension and is *not* +standard C++. That hacky implementation has some ad hoc limitations. In +particular, it prevents you from writing `Foo()`, where `Foo` +is a template that has an integral argument. + +The implementation of `EXPECT_EQ(a, b)` uses `sizeof(... a ...)` inside a +template argument, and thus doesn't compile in opt mode when `a` contains a call +to `htonl()`. It is difficult to make `EXPECT_EQ` bypass the `htonl()` bug, as +the solution must work with different compilers on various platforms. + +## The compiler complains about "undefined references" to some static const member variables, but I did define them in the class body. What's wrong? + +If your class has a static data member: + +```c++ +// foo.h +class Foo { + ... + static const int kBar = 100; +}; +``` + +You also need to define it *outside* of the class body in `foo.cc`: + +```c++ +const int Foo::kBar; // No initializer here. +``` + +Otherwise your code is **invalid C++**, and may break in unexpected ways. In +particular, using it in googletest comparison assertions (`EXPECT_EQ`, etc) will +generate an "undefined reference" linker error. The fact that "it used to work" +doesn't mean it's valid. It just means that you were lucky. :-) + +If the declaration of the static data member is `constexpr` then it is +implicitly an `inline` definition, and a separate definition in `foo.cc` is not +needed: + +```c++ +// foo.h +class Foo { + ... + static constexpr int kBar = 100; // Defines kBar, no need to do it in foo.cc. +}; +``` + +## Can I derive a test fixture from another? + +Yes. + +Each test fixture has a corresponding and same named test suite. This means only +one test suite can use a particular fixture. Sometimes, however, multiple test +cases may want to use the same or slightly different fixtures. For example, you +may want to make sure that all of a GUI library's test suites don't leak +important system resources like fonts and brushes. + +In googletest, you share a fixture among test suites by putting the shared logic +in a base test fixture, then deriving from that base a separate fixture for each +test suite that wants to use this common logic. You then use `TEST_F()` to write +tests using each derived fixture. + +Typically, your code looks like this: + +```c++ +// Defines a base test fixture. +class BaseTest : public ::testing::Test { + protected: + ... +}; + +// Derives a fixture FooTest from BaseTest. +class FooTest : public BaseTest { + protected: + void SetUp() override { + BaseTest::SetUp(); // Sets up the base fixture first. + ... additional set-up work ... + } + + void TearDown() override { + ... clean-up work for FooTest ... + BaseTest::TearDown(); // Remember to tear down the base fixture + // after cleaning up FooTest! + } + + ... functions and variables for FooTest ... +}; + +// Tests that use the fixture FooTest. +TEST_F(FooTest, Bar) { ... } +TEST_F(FooTest, Baz) { ... } + +... additional fixtures derived from BaseTest ... +``` + +If necessary, you can continue to derive test fixtures from a derived fixture. +googletest has no limit on how deep the hierarchy can be. + +For a complete example using derived test fixtures, see +[sample5_unittest.cc](https://github.com/google/googletest/blob/master/googletest/samples/sample5_unittest.cc). + +## My compiler complains "void value not ignored as it ought to be." What does this mean? + +You're probably using an `ASSERT_*()` in a function that doesn't return `void`. +`ASSERT_*()` can only be used in `void` functions, due to exceptions being +disabled by our build system. Please see more details +[here](advanced.md#assertion-placement). + +## My death test hangs (or seg-faults). How do I fix it? + +In googletest, death tests are run in a child process and the way they work is +delicate. To write death tests you really need to understand how they work—see +the details at [Death Assertions](reference/assertions.md#death) in the +Assertions Reference. + +In particular, death tests don't like having multiple threads in the parent +process. So the first thing you can try is to eliminate creating threads outside +of `EXPECT_DEATH()`. For example, you may want to use mocks or fake objects +instead of real ones in your tests. + +Sometimes this is impossible as some library you must use may be creating +threads before `main()` is even reached. In this case, you can try to minimize +the chance of conflicts by either moving as many activities as possible inside +`EXPECT_DEATH()` (in the extreme case, you want to move everything inside), or +leaving as few things as possible in it. Also, you can try to set the death test +style to `"threadsafe"`, which is safer but slower, and see if it helps. + +If you go with thread-safe death tests, remember that they rerun the test +program from the beginning in the child process. Therefore make sure your +program can run side-by-side with itself and is deterministic. + +In the end, this boils down to good concurrent programming. You have to make +sure that there are no race conditions or deadlocks in your program. No silver +bullet - sorry! + +## Should I use the constructor/destructor of the test fixture or SetUp()/TearDown()? {#CtorVsSetUp} + +The first thing to remember is that googletest does **not** reuse the same test +fixture object across multiple tests. For each `TEST_F`, googletest will create +a **fresh** test fixture object, immediately call `SetUp()`, run the test body, +call `TearDown()`, and then delete the test fixture object. + +When you need to write per-test set-up and tear-down logic, you have the choice +between using the test fixture constructor/destructor or `SetUp()/TearDown()`. +The former is usually preferred, as it has the following benefits: + +* By initializing a member variable in the constructor, we have the option to + make it `const`, which helps prevent accidental changes to its value and + makes the tests more obviously correct. +* In case we need to subclass the test fixture class, the subclass' + constructor is guaranteed to call the base class' constructor *first*, and + the subclass' destructor is guaranteed to call the base class' destructor + *afterward*. With `SetUp()/TearDown()`, a subclass may make the mistake of + forgetting to call the base class' `SetUp()/TearDown()` or call them at the + wrong time. + +You may still want to use `SetUp()/TearDown()` in the following cases: + +* C++ does not allow virtual function calls in constructors and destructors. + You can call a method declared as virtual, but it will not use dynamic + dispatch, it will use the definition from the class the constructor of which + is currently executing. This is because calling a virtual method before the + derived class constructor has a chance to run is very dangerous - the + virtual method might operate on uninitialized data. Therefore, if you need + to call a method that will be overridden in a derived class, you have to use + `SetUp()/TearDown()`. +* In the body of a constructor (or destructor), it's not possible to use the + `ASSERT_xx` macros. Therefore, if the set-up operation could cause a fatal + test failure that should prevent the test from running, it's necessary to + use `abort` and abort the whole test + executable, or to use `SetUp()` instead of a constructor. +* If the tear-down operation could throw an exception, you must use + `TearDown()` as opposed to the destructor, as throwing in a destructor leads + to undefined behavior and usually will kill your program right away. Note + that many standard libraries (like STL) may throw when exceptions are + enabled in the compiler. Therefore you should prefer `TearDown()` if you + want to write portable tests that work with or without exceptions. +* The googletest team is considering making the assertion macros throw on + platforms where exceptions are enabled (e.g. Windows, Mac OS, and Linux + client-side), which will eliminate the need for the user to propagate + failures from a subroutine to its caller. Therefore, you shouldn't use + googletest assertions in a destructor if your code could run on such a + platform. + +## The compiler complains "no matching function to call" when I use ASSERT_PRED*. How do I fix it? + +See details for [`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the +Assertions Reference. + +## My compiler complains about "ignoring return value" when I call RUN_ALL_TESTS(). Why? + +Some people had been ignoring the return value of `RUN_ALL_TESTS()`. That is, +instead of + +```c++ + return RUN_ALL_TESTS(); +``` + +they write + +```c++ + RUN_ALL_TESTS(); +``` + +This is **wrong and dangerous**. The testing services needs to see the return +value of `RUN_ALL_TESTS()` in order to determine if a test has passed. If your +`main()` function ignores it, your test will be considered successful even if it +has a googletest assertion failure. Very bad. + +We have decided to fix this (thanks to Michael Chastain for the idea). Now, your +code will no longer be able to ignore `RUN_ALL_TESTS()` when compiled with +`gcc`. If you do so, you'll get a compiler error. + +If you see the compiler complaining about you ignoring the return value of +`RUN_ALL_TESTS()`, the fix is simple: just make sure its value is used as the +return value of `main()`. + +But how could we introduce a change that breaks existing tests? Well, in this +case, the code was already broken in the first place, so we didn't break it. :-) + +## My compiler complains that a constructor (or destructor) cannot return a value. What's going on? + +Due to a peculiarity of C++, in order to support the syntax for streaming +messages to an `ASSERT_*`, e.g. + +```c++ + ASSERT_EQ(1, Foo()) << "blah blah" << foo; +``` + +we had to give up using `ASSERT*` and `FAIL*` (but not `EXPECT*` and +`ADD_FAILURE*`) in constructors and destructors. The workaround is to move the +content of your constructor/destructor to a private void member function, or +switch to `EXPECT_*()` if that works. This +[section](advanced.md#assertion-placement) in the user's guide explains it. + +## My SetUp() function is not called. Why? + +C++ is case-sensitive. Did you spell it as `Setup()`? + +Similarly, sometimes people spell `SetUpTestSuite()` as `SetupTestSuite()` and +wonder why it's never called. + + +## I have several test suites which share the same test fixture logic, do I have to define a new test fixture class for each of them? This seems pretty tedious. + +You don't have to. Instead of + +```c++ +class FooTest : public BaseTest {}; + +TEST_F(FooTest, Abc) { ... } +TEST_F(FooTest, Def) { ... } + +class BarTest : public BaseTest {}; + +TEST_F(BarTest, Abc) { ... } +TEST_F(BarTest, Def) { ... } +``` + +you can simply `typedef` the test fixtures: + +```c++ +typedef BaseTest FooTest; + +TEST_F(FooTest, Abc) { ... } +TEST_F(FooTest, Def) { ... } + +typedef BaseTest BarTest; + +TEST_F(BarTest, Abc) { ... } +TEST_F(BarTest, Def) { ... } +``` + +## googletest output is buried in a whole bunch of LOG messages. What do I do? + +The googletest output is meant to be a concise and human-friendly report. If +your test generates textual output itself, it will mix with the googletest +output, making it hard to read. However, there is an easy solution to this +problem. + +Since `LOG` messages go to stderr, we decided to let googletest output go to +stdout. This way, you can easily separate the two using redirection. For +example: + +```shell +$ ./my_test > gtest_output.txt +``` + +## Why should I prefer test fixtures over global variables? + +There are several good reasons: + +1. It's likely your test needs to change the states of its global variables. + This makes it difficult to keep side effects from escaping one test and + contaminating others, making debugging difficult. By using fixtures, each + test has a fresh set of variables that's different (but with the same + names). Thus, tests are kept independent of each other. +2. Global variables pollute the global namespace. +3. Test fixtures can be reused via subclassing, which cannot be done easily + with global variables. This is useful if many test suites have something in + common. + +## What can the statement argument in ASSERT_DEATH() be? + +`ASSERT_DEATH(statement, matcher)` (or any death assertion macro) can be used +wherever *`statement`* is valid. So basically *`statement`* can be any C++ +statement that makes sense in the current context. In particular, it can +reference global and/or local variables, and can be: + +* a simple function call (often the case), +* a complex expression, or +* a compound statement. + +Some examples are shown here: + +```c++ +// A death test can be a simple function call. +TEST(MyDeathTest, FunctionCall) { + ASSERT_DEATH(Xyz(5), "Xyz failed"); +} + +// Or a complex expression that references variables and functions. +TEST(MyDeathTest, ComplexExpression) { + const bool c = Condition(); + ASSERT_DEATH((c ? Func1(0) : object2.Method("test")), + "(Func1|Method) failed"); +} + +// Death assertions can be used anywhere in a function. In +// particular, they can be inside a loop. +TEST(MyDeathTest, InsideLoop) { + // Verifies that Foo(0), Foo(1), ..., and Foo(4) all die. + for (int i = 0; i < 5; i++) { + EXPECT_DEATH_M(Foo(i), "Foo has \\d+ errors", + ::testing::Message() << "where i is " << i); + } +} + +// A death assertion can contain a compound statement. +TEST(MyDeathTest, CompoundStatement) { + // Verifies that at lease one of Bar(0), Bar(1), ..., and + // Bar(4) dies. + ASSERT_DEATH({ + for (int i = 0; i < 5; i++) { + Bar(i); + } + }, + "Bar has \\d+ errors"); +} +``` + +## I have a fixture class `FooTest`, but `TEST_F(FooTest, Bar)` gives me error ``"no matching function for call to `FooTest::FooTest()'"``. Why? + +Googletest needs to be able to create objects of your test fixture class, so it +must have a default constructor. Normally the compiler will define one for you. +However, there are cases where you have to define your own: + +* If you explicitly declare a non-default constructor for class `FooTest` + (`DISALLOW_EVIL_CONSTRUCTORS()` does this), then you need to define a + default constructor, even if it would be empty. +* If `FooTest` has a const non-static data member, then you have to define the + default constructor *and* initialize the const member in the initializer + list of the constructor. (Early versions of `gcc` doesn't force you to + initialize the const member. It's a bug that has been fixed in `gcc 4`.) + +## Why does ASSERT_DEATH complain about previous threads that were already joined? + +With the Linux pthread library, there is no turning back once you cross the line +from a single thread to multiple threads. The first time you create a thread, a +manager thread is created in addition, so you get 3, not 2, threads. Later when +the thread you create joins the main thread, the thread count decrements by 1, +but the manager thread will never be killed, so you still have 2 threads, which +means you cannot safely run a death test. + +The new NPTL thread library doesn't suffer from this problem, as it doesn't +create a manager thread. However, if you don't control which machine your test +runs on, you shouldn't depend on this. + +## Why does googletest require the entire test suite, instead of individual tests, to be named *DeathTest when it uses ASSERT_DEATH? + +googletest does not interleave tests from different test suites. That is, it +runs all tests in one test suite first, and then runs all tests in the next test +suite, and so on. googletest does this because it needs to set up a test suite +before the first test in it is run, and tear it down afterwards. Splitting up +the test case would require multiple set-up and tear-down processes, which is +inefficient and makes the semantics unclean. + +If we were to determine the order of tests based on test name instead of test +case name, then we would have a problem with the following situation: + +```c++ +TEST_F(FooTest, AbcDeathTest) { ... } +TEST_F(FooTest, Uvw) { ... } + +TEST_F(BarTest, DefDeathTest) { ... } +TEST_F(BarTest, Xyz) { ... } +``` + +Since `FooTest.AbcDeathTest` needs to run before `BarTest.Xyz`, and we don't +interleave tests from different test suites, we need to run all tests in the +`FooTest` case before running any test in the `BarTest` case. This contradicts +with the requirement to run `BarTest.DefDeathTest` before `FooTest.Uvw`. + +## But I don't like calling my entire test suite \*DeathTest when it contains both death tests and non-death tests. What do I do? + +You don't have to, but if you like, you may split up the test suite into +`FooTest` and `FooDeathTest`, where the names make it clear that they are +related: + +```c++ +class FooTest : public ::testing::Test { ... }; + +TEST_F(FooTest, Abc) { ... } +TEST_F(FooTest, Def) { ... } + +using FooDeathTest = FooTest; + +TEST_F(FooDeathTest, Uvw) { ... EXPECT_DEATH(...) ... } +TEST_F(FooDeathTest, Xyz) { ... ASSERT_DEATH(...) ... } +``` + +## googletest prints the LOG messages in a death test's child process only when the test fails. How can I see the LOG messages when the death test succeeds? + +Printing the LOG messages generated by the statement inside `EXPECT_DEATH()` +makes it harder to search for real problems in the parent's log. Therefore, +googletest only prints them when the death test has failed. + +If you really need to see such LOG messages, a workaround is to temporarily +break the death test (e.g. by changing the regex pattern it is expected to +match). Admittedly, this is a hack. We'll consider a more permanent solution +after the fork-and-exec-style death tests are implemented. + +## The compiler complains about `no match for 'operator<<'` when I use an assertion. What gives? + +If you use a user-defined type `FooType` in an assertion, you must make sure +there is an `std::ostream& operator<<(std::ostream&, const FooType&)` function +defined such that we can print a value of `FooType`. + +In addition, if `FooType` is declared in a name space, the `<<` operator also +needs to be defined in the *same* name space. See +[Tip of the Week #49](http://abseil.io/tips/49) for details. + +## How do I suppress the memory leak messages on Windows? + +Since the statically initialized googletest singleton requires allocations on +the heap, the Visual C++ memory leak detector will report memory leaks at the +end of the program run. The easiest way to avoid this is to use the +`_CrtMemCheckpoint` and `_CrtMemDumpAllObjectsSince` calls to not report any +statically initialized heap objects. See MSDN for more details and additional +heap check/debug routines. + +## How can my code detect if it is running in a test? + +If you write code that sniffs whether it's running in a test and does different +things accordingly, you are leaking test-only logic into production code and +there is no easy way to ensure that the test-only code paths aren't run by +mistake in production. Such cleverness also leads to +[Heisenbugs](https://en.wikipedia.org/wiki/Heisenbug). Therefore we strongly +advise against the practice, and googletest doesn't provide a way to do it. + +In general, the recommended way to cause the code to behave differently under +test is [Dependency Injection](http://en.wikipedia.org/wiki/Dependency_injection). You can inject +different functionality from the test and from the production code. Since your +production code doesn't link in the for-test logic at all (the +[`testonly`](http://docs.bazel.build/versions/master/be/common-definitions.html#common.testonly) attribute for BUILD targets helps to ensure +that), there is no danger in accidentally running it. + +However, if you *really*, *really*, *really* have no choice, and if you follow +the rule of ending your test program names with `_test`, you can use the +*horrible* hack of sniffing your executable name (`argv[0]` in `main()`) to know +whether the code is under test. + +## How do I temporarily disable a test? + +If you have a broken test that you cannot fix right away, you can add the +`DISABLED_` prefix to its name. This will exclude it from execution. This is +better than commenting out the code or using `#if 0`, as disabled tests are +still compiled (and thus won't rot). + +To include disabled tests in test execution, just invoke the test program with +the `--gtest_also_run_disabled_tests` flag. + +## Is it OK if I have two separate `TEST(Foo, Bar)` test methods defined in different namespaces? + +Yes. + +The rule is **all test methods in the same test suite must use the same fixture +class.** This means that the following is **allowed** because both tests use the +same fixture class (`::testing::Test`). + +```c++ +namespace foo { +TEST(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace foo + +namespace bar { +TEST(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace bar +``` + +However, the following code is **not allowed** and will produce a runtime error +from googletest because the test methods are using different test fixture +classes with the same test suite name. + +```c++ +namespace foo { +class CoolTest : public ::testing::Test {}; // Fixture foo::CoolTest +TEST_F(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace foo + +namespace bar { +class CoolTest : public ::testing::Test {}; // Fixture: bar::CoolTest +TEST_F(CoolTest, DoSomething) { + SUCCEED(); +} +} // namespace bar +``` diff --git a/_codeql_build_dir/_deps/googletest-src/docs/gmock_cheat_sheet.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_cheat_sheet.md new file mode 100644 index 0000000..17ed7a5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/gmock_cheat_sheet.md @@ -0,0 +1,241 @@ +# gMock Cheat Sheet + +## Defining a Mock Class + +### Mocking a Normal Class {#MockClass} + +Given + +```cpp +class Foo { + ... + virtual ~Foo(); + virtual int GetSize() const = 0; + virtual string Describe(const char* name) = 0; + virtual string Describe(int type) = 0; + virtual bool Process(Bar elem, int count) = 0; +}; +``` + +(note that `~Foo()` **must** be virtual) we can define its mock as + +```cpp +#include "gmock/gmock.h" + +class MockFoo : public Foo { + ... + MOCK_METHOD(int, GetSize, (), (const, override)); + MOCK_METHOD(string, Describe, (const char* name), (override)); + MOCK_METHOD(string, Describe, (int type), (override)); + MOCK_METHOD(bool, Process, (Bar elem, int count), (override)); +}; +``` + +To create a "nice" mock, which ignores all uninteresting calls, a "naggy" mock, +which warns on all uninteresting calls, or a "strict" mock, which treats them as +failures: + +```cpp +using ::testing::NiceMock; +using ::testing::NaggyMock; +using ::testing::StrictMock; + +NiceMock nice_foo; // The type is a subclass of MockFoo. +NaggyMock naggy_foo; // The type is a subclass of MockFoo. +StrictMock strict_foo; // The type is a subclass of MockFoo. +``` + +{: .callout .note} +**Note:** A mock object is currently naggy by default. We may make it nice by +default in the future. + +### Mocking a Class Template {#MockTemplate} + +Class templates can be mocked just like any class. + +To mock + +```cpp +template +class StackInterface { + ... + virtual ~StackInterface(); + virtual int GetSize() const = 0; + virtual void Push(const Elem& x) = 0; +}; +``` + +(note that all member functions that are mocked, including `~StackInterface()` +**must** be virtual). + +```cpp +template +class MockStack : public StackInterface { + ... + MOCK_METHOD(int, GetSize, (), (const, override)); + MOCK_METHOD(void, Push, (const Elem& x), (override)); +}; +``` + +### Specifying Calling Conventions for Mock Functions + +If your mock function doesn't use the default calling convention, you can +specify it by adding `Calltype(convention)` to `MOCK_METHOD`'s 4th parameter. +For example, + +```cpp + MOCK_METHOD(bool, Foo, (int n), (Calltype(STDMETHODCALLTYPE))); + MOCK_METHOD(int, Bar, (double x, double y), + (const, Calltype(STDMETHODCALLTYPE))); +``` + +where `STDMETHODCALLTYPE` is defined by `` on Windows. + +## Using Mocks in Tests {#UsingMocks} + +The typical work flow is: + +1. Import the gMock names you need to use. All gMock symbols are in the + `testing` namespace unless they are macros or otherwise noted. +2. Create the mock objects. +3. Optionally, set the default actions of the mock objects. +4. Set your expectations on the mock objects (How will they be called? What + will they do?). +5. Exercise code that uses the mock objects; if necessary, check the result + using googletest assertions. +6. When a mock object is destructed, gMock automatically verifies that all + expectations on it have been satisfied. + +Here's an example: + +```cpp +using ::testing::Return; // #1 + +TEST(BarTest, DoesThis) { + MockFoo foo; // #2 + + ON_CALL(foo, GetSize()) // #3 + .WillByDefault(Return(1)); + // ... other default actions ... + + EXPECT_CALL(foo, Describe(5)) // #4 + .Times(3) + .WillRepeatedly(Return("Category 5")); + // ... other expectations ... + + EXPECT_EQ(MyProductionFunction(&foo), "good"); // #5 +} // #6 +``` + +## Setting Default Actions {#OnCall} + +gMock has a **built-in default action** for any function that returns `void`, +`bool`, a numeric value, or a pointer. In C++11, it will additionally returns +the default-constructed value, if one exists for the given type. + +To customize the default action for functions with return type `T`, use +[`DefaultValue`](reference/mocking.md#DefaultValue). For example: + +```cpp + // Sets the default action for return type std::unique_ptr to + // creating a new Buzz every time. + DefaultValue>::SetFactory( + [] { return MakeUnique(AccessLevel::kInternal); }); + + // When this fires, the default action of MakeBuzz() will run, which + // will return a new Buzz object. + EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")).Times(AnyNumber()); + + auto buzz1 = mock_buzzer_.MakeBuzz("hello"); + auto buzz2 = mock_buzzer_.MakeBuzz("hello"); + EXPECT_NE(buzz1, nullptr); + EXPECT_NE(buzz2, nullptr); + EXPECT_NE(buzz1, buzz2); + + // Resets the default action for return type std::unique_ptr, + // to avoid interfere with other tests. + DefaultValue>::Clear(); +``` + +To customize the default action for a particular method of a specific mock +object, use [`ON_CALL`](reference/mocking.md#ON_CALL). `ON_CALL` has a similar +syntax to `EXPECT_CALL`, but it is used for setting default behaviors when you +do not require that the mock method is called. See +[Knowing When to Expect](gmock_cook_book.md#UseOnCall) for a more detailed +discussion. + +## Setting Expectations {#ExpectCall} + +See [`EXPECT_CALL`](reference/mocking.md#EXPECT_CALL) in the Mocking Reference. + +## Matchers {#MatcherList} + +See the [Matchers Reference](reference/matchers.md). + +## Actions {#ActionList} + +See the [Actions Reference](reference/actions.md). + +## Cardinalities {#CardinalityList} + +See the [`Times` clause](reference/mocking.md#EXPECT_CALL.Times) of +`EXPECT_CALL` in the Mocking Reference. + +## Expectation Order + +By default, expectations can be matched in *any* order. If some or all +expectations must be matched in a given order, you can use the +[`After` clause](reference/mocking.md#EXPECT_CALL.After) or +[`InSequence` clause](reference/mocking.md#EXPECT_CALL.InSequence) of +`EXPECT_CALL`, or use an [`InSequence` object](reference/mocking.md#InSequence). + +## Verifying and Resetting a Mock + +gMock will verify the expectations on a mock object when it is destructed, or +you can do it earlier: + +```cpp +using ::testing::Mock; +... +// Verifies and removes the expectations on mock_obj; +// returns true if and only if successful. +Mock::VerifyAndClearExpectations(&mock_obj); +... +// Verifies and removes the expectations on mock_obj; +// also removes the default actions set by ON_CALL(); +// returns true if and only if successful. +Mock::VerifyAndClear(&mock_obj); +``` + +Do not set new expectations after verifying and clearing a mock after its use. +Setting expectations after code that exercises the mock has undefined behavior. +See [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more +information. + +You can also tell gMock that a mock object can be leaked and doesn't need to be +verified: + +```cpp +Mock::AllowLeak(&mock_obj); +``` + +## Mock Classes + +gMock defines a convenient mock class template + +```cpp +class MockFunction { + public: + MOCK_METHOD(R, Call, (A1, ..., An)); +}; +``` + +See this [recipe](gmock_cook_book.md#using-check-points) for one application of +it. + +## Flags + +| Flag | Description | +| :----------------------------- | :---------------------------------------- | +| `--gmock_catch_leaked_mocks=0` | Don't report leaked mock objects as failures. | +| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. | diff --git a/_codeql_build_dir/_deps/googletest-src/docs/gmock_cook_book.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_cook_book.md new file mode 100644 index 0000000..c08958e --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/gmock_cook_book.md @@ -0,0 +1,4301 @@ +# gMock Cookbook + +You can find recipes for using gMock here. If you haven't yet, please read +[the dummy guide](gmock_for_dummies.md) first to make sure you understand the +basics. + +{: .callout .note} +**Note:** gMock lives in the `testing` name space. For readability, it is +recommended to write `using ::testing::Foo;` once in your file before using the +name `Foo` defined by gMock. We omit such `using` statements in this section for +brevity, but you should do it in your own code. + +## Creating Mock Classes + +Mock classes are defined as normal classes, using the `MOCK_METHOD` macro to +generate mocked methods. The macro gets 3 or 4 parameters: + +```cpp +class MyMock { + public: + MOCK_METHOD(ReturnType, MethodName, (Args...)); + MOCK_METHOD(ReturnType, MethodName, (Args...), (Specs...)); +}; +``` + +The first 3 parameters are simply the method declaration, split into 3 parts. +The 4th parameter accepts a closed list of qualifiers, which affect the +generated method: + +* **`const`** - Makes the mocked method a `const` method. Required if + overriding a `const` method. +* **`override`** - Marks the method with `override`. Recommended if overriding + a `virtual` method. +* **`noexcept`** - Marks the method with `noexcept`. Required if overriding a + `noexcept` method. +* **`Calltype(...)`** - Sets the call type for the method (e.g. to + `STDMETHODCALLTYPE`), useful in Windows. +* **`ref(...)`** - Marks the method with the reference qualification + specified. Required if overriding a method that has reference + qualifications. Eg `ref(&)` or `ref(&&)`. + +### Dealing with unprotected commas + +Unprotected commas, i.e. commas which are not surrounded by parentheses, prevent +`MOCK_METHOD` from parsing its arguments correctly: + +{: .bad} +```cpp +class MockFoo { + public: + MOCK_METHOD(std::pair, GetPair, ()); // Won't compile! + MOCK_METHOD(bool, CheckMap, (std::map, bool)); // Won't compile! +}; +``` + +Solution 1 - wrap with parentheses: + +{: .good} +```cpp +class MockFoo { + public: + MOCK_METHOD((std::pair), GetPair, ()); + MOCK_METHOD(bool, CheckMap, ((std::map), bool)); +}; +``` + +Note that wrapping a return or argument type with parentheses is, in general, +invalid C++. `MOCK_METHOD` removes the parentheses. + +Solution 2 - define an alias: + +{: .good} +```cpp +class MockFoo { + public: + using BoolAndInt = std::pair; + MOCK_METHOD(BoolAndInt, GetPair, ()); + using MapIntDouble = std::map; + MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); +}; +``` + +### Mocking Private or Protected Methods + +You must always put a mock method definition (`MOCK_METHOD`) in a `public:` +section of the mock class, regardless of the method being mocked being `public`, +`protected`, or `private` in the base class. This allows `ON_CALL` and +`EXPECT_CALL` to reference the mock function from outside of the mock class. +(Yes, C++ allows a subclass to change the access level of a virtual function in +the base class.) Example: + +```cpp +class Foo { + public: + ... + virtual bool Transform(Gadget* g) = 0; + + protected: + virtual void Resume(); + + private: + virtual int GetTimeOut(); +}; + +class MockFoo : public Foo { + public: + ... + MOCK_METHOD(bool, Transform, (Gadget* g), (override)); + + // The following must be in the public section, even though the + // methods are protected or private in the base class. + MOCK_METHOD(void, Resume, (), (override)); + MOCK_METHOD(int, GetTimeOut, (), (override)); +}; +``` + +### Mocking Overloaded Methods + +You can mock overloaded functions as usual. No special attention is required: + +```cpp +class Foo { + ... + + // Must be virtual as we'll inherit from Foo. + virtual ~Foo(); + + // Overloaded on the types and/or numbers of arguments. + virtual int Add(Element x); + virtual int Add(int times, Element x); + + // Overloaded on the const-ness of this object. + virtual Bar& GetBar(); + virtual const Bar& GetBar() const; +}; + +class MockFoo : public Foo { + ... + MOCK_METHOD(int, Add, (Element x), (override)); + MOCK_METHOD(int, Add, (int times, Element x), (override)); + + MOCK_METHOD(Bar&, GetBar, (), (override)); + MOCK_METHOD(const Bar&, GetBar, (), (const, override)); +}; +``` + +{: .callout .note} +**Note:** if you don't mock all versions of the overloaded method, the compiler +will give you a warning about some methods in the base class being hidden. To +fix that, use `using` to bring them in scope: + +```cpp +class MockFoo : public Foo { + ... + using Foo::Add; + MOCK_METHOD(int, Add, (Element x), (override)); + // We don't want to mock int Add(int times, Element x); + ... +}; +``` + +### Mocking Class Templates + +You can mock class templates just like any class. + +```cpp +template +class StackInterface { + ... + // Must be virtual as we'll inherit from StackInterface. + virtual ~StackInterface(); + + virtual int GetSize() const = 0; + virtual void Push(const Elem& x) = 0; +}; + +template +class MockStack : public StackInterface { + ... + MOCK_METHOD(int, GetSize, (), (override)); + MOCK_METHOD(void, Push, (const Elem& x), (override)); +}; +``` + +### Mocking Non-virtual Methods {#MockingNonVirtualMethods} + +gMock can mock non-virtual functions to be used in Hi-perf dependency injection. + +In this case, instead of sharing a common base class with the real class, your +mock class will be *unrelated* to the real class, but contain methods with the +same signatures. The syntax for mocking non-virtual methods is the *same* as +mocking virtual methods (just don't add `override`): + +```cpp +// A simple packet stream class. None of its members is virtual. +class ConcretePacketStream { + public: + void AppendPacket(Packet* new_packet); + const Packet* GetPacket(size_t packet_number) const; + size_t NumberOfPackets() const; + ... +}; + +// A mock packet stream class. It inherits from no other, but defines +// GetPacket() and NumberOfPackets(). +class MockPacketStream { + public: + MOCK_METHOD(const Packet*, GetPacket, (size_t packet_number), (const)); + MOCK_METHOD(size_t, NumberOfPackets, (), (const)); + ... +}; +``` + +Note that the mock class doesn't define `AppendPacket()`, unlike the real class. +That's fine as long as the test doesn't need to call it. + +Next, you need a way to say that you want to use `ConcretePacketStream` in +production code, and use `MockPacketStream` in tests. Since the functions are +not virtual and the two classes are unrelated, you must specify your choice at +*compile time* (as opposed to run time). + +One way to do it is to templatize your code that needs to use a packet stream. +More specifically, you will give your code a template type argument for the type +of the packet stream. In production, you will instantiate your template with +`ConcretePacketStream` as the type argument. In tests, you will instantiate the +same template with `MockPacketStream`. For example, you may write: + +```cpp +template +void CreateConnection(PacketStream* stream) { ... } + +template +class PacketReader { + public: + void ReadPackets(PacketStream* stream, size_t packet_num); +}; +``` + +Then you can use `CreateConnection()` and +`PacketReader` in production code, and use +`CreateConnection()` and `PacketReader` in +tests. + +```cpp + MockPacketStream mock_stream; + EXPECT_CALL(mock_stream, ...)...; + .. set more expectations on mock_stream ... + PacketReader reader(&mock_stream); + ... exercise reader ... +``` + +### Mocking Free Functions + +It is not possible to directly mock a free function (i.e. a C-style function or +a static method). If you need to, you can rewrite your code to use an interface +(abstract class). + +Instead of calling a free function (say, `OpenFile`) directly, introduce an +interface for it and have a concrete subclass that calls the free function: + +```cpp +class FileInterface { + public: + ... + virtual bool Open(const char* path, const char* mode) = 0; +}; + +class File : public FileInterface { + public: + ... + bool Open(const char* path, const char* mode) override { + return OpenFile(path, mode); + } +}; +``` + +Your code should talk to `FileInterface` to open a file. Now it's easy to mock +out the function. + +This may seem like a lot of hassle, but in practice you often have multiple +related functions that you can put in the same interface, so the per-function +syntactic overhead will be much lower. + +If you are concerned about the performance overhead incurred by virtual +functions, and profiling confirms your concern, you can combine this with the +recipe for [mocking non-virtual methods](#MockingNonVirtualMethods). + +### Old-Style `MOCK_METHODn` Macros + +Before the generic `MOCK_METHOD` macro +[was introduced in 2018](https://github.com/google/googletest/commit/c5f08bf91944ce1b19bcf414fa1760e69d20afc2), +mocks where created using a family of macros collectively called `MOCK_METHODn`. +These macros are still supported, though migration to the new `MOCK_METHOD` is +recommended. + +The macros in the `MOCK_METHODn` family differ from `MOCK_METHOD`: + +* The general structure is `MOCK_METHODn(MethodName, ReturnType(Args))`, + instead of `MOCK_METHOD(ReturnType, MethodName, (Args))`. +* The number `n` must equal the number of arguments. +* When mocking a const method, one must use `MOCK_CONST_METHODn`. +* When mocking a class template, the macro name must be suffixed with `_T`. +* In order to specify the call type, the macro name must be suffixed with + `_WITH_CALLTYPE`, and the call type is the first macro argument. + +Old macros and their new equivalents: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Simple
OldMOCK_METHOD1(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int))
Const Method
OldMOCK_CONST_METHOD1(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const))
Method in a Class Template
OldMOCK_METHOD1_T(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int))
Const Method in a Class Template
OldMOCK_CONST_METHOD1_T(Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const))
Method with Call Type
OldMOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))
Const Method with Call Type
OldMOCK_CONST_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))
Method with Call Type in a Class Template
OldMOCK_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))
Const Method with Call Type in a Class Template
OldMOCK_CONST_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))
NewMOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))
+ +### The Nice, the Strict, and the Naggy {#NiceStrictNaggy} + +If a mock method has no `EXPECT_CALL` spec but is called, we say that it's an +"uninteresting call", and the default action (which can be specified using +`ON_CALL()`) of the method will be taken. Currently, an uninteresting call will +also by default cause gMock to print a warning. (In the future, we might remove +this warning by default.) + +However, sometimes you may want to ignore these uninteresting calls, and +sometimes you may want to treat them as errors. gMock lets you make the decision +on a per-mock-object basis. + +Suppose your test uses a mock class `MockFoo`: + +```cpp +TEST(...) { + MockFoo mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +If a method of `mock_foo` other than `DoThis()` is called, you will get a +warning. However, if you rewrite your test to use `NiceMock` instead, +you can suppress the warning: + +```cpp +using ::testing::NiceMock; + +TEST(...) { + NiceMock mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +`NiceMock` is a subclass of `MockFoo`, so it can be used wherever +`MockFoo` is accepted. + +It also works if `MockFoo`'s constructor takes some arguments, as +`NiceMock` "inherits" `MockFoo`'s constructors: + +```cpp +using ::testing::NiceMock; + +TEST(...) { + NiceMock mock_foo(5, "hi"); // Calls MockFoo(5, "hi"). + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +The usage of `StrictMock` is similar, except that it makes all uninteresting +calls failures: + +```cpp +using ::testing::StrictMock; + +TEST(...) { + StrictMock mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... + + // The test will fail if a method of mock_foo other than DoThis() + // is called. +} +``` + +{: .callout .note} +NOTE: `NiceMock` and `StrictMock` only affects *uninteresting* calls (calls of +*methods* with no expectations); they do not affect *unexpected* calls (calls of +methods with expectations, but they don't match). See +[Understanding Uninteresting vs Unexpected Calls](#uninteresting-vs-unexpected). + +There are some caveats though (sadly they are side effects of C++'s +limitations): + +1. `NiceMock` and `StrictMock` only work for mock methods + defined using the `MOCK_METHOD` macro **directly** in the `MockFoo` class. + If a mock method is defined in a **base class** of `MockFoo`, the "nice" or + "strict" modifier may not affect it, depending on the compiler. In + particular, nesting `NiceMock` and `StrictMock` (e.g. + `NiceMock >`) is **not** supported. +2. `NiceMock` and `StrictMock` may not work correctly if the + destructor of `MockFoo` is not virtual. We would like to fix this, but it + requires cleaning up existing tests. + +Finally, you should be **very cautious** about when to use naggy or strict +mocks, as they tend to make tests more brittle and harder to maintain. When you +refactor your code without changing its externally visible behavior, ideally you +shouldn't need to update any tests. If your code interacts with a naggy mock, +however, you may start to get spammed with warnings as the result of your +change. Worse, if your code interacts with a strict mock, your tests may start +to fail and you'll be forced to fix them. Our general recommendation is to use +nice mocks (not yet the default) most of the time, use naggy mocks (the current +default) when developing or debugging tests, and use strict mocks only as the +last resort. + +### Simplifying the Interface without Breaking Existing Code {#SimplerInterfaces} + +Sometimes a method has a long list of arguments that is mostly uninteresting. +For example: + +```cpp +class LogSink { + public: + ... + virtual void send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, + const struct tm* tm_time, + const char* message, size_t message_len) = 0; +}; +``` + +This method's argument list is lengthy and hard to work with (the `message` +argument is not even 0-terminated). If we mock it as is, using the mock will be +awkward. If, however, we try to simplify this interface, we'll need to fix all +clients depending on it, which is often infeasible. + +The trick is to redispatch the method in the mock class: + +```cpp +class ScopedMockLog : public LogSink { + public: + ... + void send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, const tm* tm_time, + const char* message, size_t message_len) override { + // We are only interested in the log severity, full file name, and + // log message. + Log(severity, full_filename, std::string(message, message_len)); + } + + // Implements the mock method: + // + // void Log(LogSeverity severity, + // const string& file_path, + // const string& message); + MOCK_METHOD(void, Log, + (LogSeverity severity, const string& file_path, + const string& message)); +}; +``` + +By defining a new mock method with a trimmed argument list, we make the mock +class more user-friendly. + +This technique may also be applied to make overloaded methods more amenable to +mocking. For example, when overloads have been used to implement default +arguments: + +```cpp +class MockTurtleFactory : public TurtleFactory { + public: + Turtle* MakeTurtle(int length, int weight) override { ... } + Turtle* MakeTurtle(int length, int weight, int speed) override { ... } + + // the above methods delegate to this one: + MOCK_METHOD(Turtle*, DoMakeTurtle, ()); +}; +``` + +This allows tests that don't care which overload was invoked to avoid specifying +argument matchers: + +```cpp +ON_CALL(factory, DoMakeTurtle) + .WillByDefault(Return(MakeMockTurtle())); +``` + +### Alternative to Mocking Concrete Classes + +Often you may find yourself using classes that don't implement interfaces. In +order to test your code that uses such a class (let's call it `Concrete`), you +may be tempted to make the methods of `Concrete` virtual and then mock it. + +Try not to do that. + +Making a non-virtual function virtual is a big decision. It creates an extension +point where subclasses can tweak your class' behavior. This weakens your control +on the class because now it's harder to maintain the class invariants. You +should make a function virtual only when there is a valid reason for a subclass +to override it. + +Mocking concrete classes directly is problematic as it creates a tight coupling +between the class and the tests - any small change in the class may invalidate +your tests and make test maintenance a pain. + +To avoid such problems, many programmers have been practicing "coding to +interfaces": instead of talking to the `Concrete` class, your code would define +an interface and talk to it. Then you implement that interface as an adaptor on +top of `Concrete`. In tests, you can easily mock that interface to observe how +your code is doing. + +This technique incurs some overhead: + +* You pay the cost of virtual function calls (usually not a problem). +* There is more abstraction for the programmers to learn. + +However, it can also bring significant benefits in addition to better +testability: + +* `Concrete`'s API may not fit your problem domain very well, as you may not + be the only client it tries to serve. By designing your own interface, you + have a chance to tailor it to your need - you may add higher-level + functionalities, rename stuff, etc instead of just trimming the class. This + allows you to write your code (user of the interface) in a more natural way, + which means it will be more readable, more maintainable, and you'll be more + productive. +* If `Concrete`'s implementation ever has to change, you don't have to rewrite + everywhere it is used. Instead, you can absorb the change in your + implementation of the interface, and your other code and tests will be + insulated from this change. + +Some people worry that if everyone is practicing this technique, they will end +up writing lots of redundant code. This concern is totally understandable. +However, there are two reasons why it may not be the case: + +* Different projects may need to use `Concrete` in different ways, so the best + interfaces for them will be different. Therefore, each of them will have its + own domain-specific interface on top of `Concrete`, and they will not be the + same code. +* If enough projects want to use the same interface, they can always share it, + just like they have been sharing `Concrete`. You can check in the interface + and the adaptor somewhere near `Concrete` (perhaps in a `contrib` + sub-directory) and let many projects use it. + +You need to weigh the pros and cons carefully for your particular problem, but +I'd like to assure you that the Java community has been practicing this for a +long time and it's a proven effective technique applicable in a wide variety of +situations. :-) + +### Delegating Calls to a Fake {#DelegatingToFake} + +Some times you have a non-trivial fake implementation of an interface. For +example: + +```cpp +class Foo { + public: + virtual ~Foo() {} + virtual char DoThis(int n) = 0; + virtual void DoThat(const char* s, int* p) = 0; +}; + +class FakeFoo : public Foo { + public: + char DoThis(int n) override { + return (n > 0) ? '+' : + (n < 0) ? '-' : '0'; + } + + void DoThat(const char* s, int* p) override { + *p = strlen(s); + } +}; +``` + +Now you want to mock this interface such that you can set expectations on it. +However, you also want to use `FakeFoo` for the default behavior, as duplicating +it in the mock object is, well, a lot of work. + +When you define the mock class using gMock, you can have it delegate its default +action to a fake class you already have, using this pattern: + +```cpp +class MockFoo : public Foo { + public: + // Normal mock method definitions using gMock. + MOCK_METHOD(char, DoThis, (int n), (override)); + MOCK_METHOD(void, DoThat, (const char* s, int* p), (override)); + + // Delegates the default actions of the methods to a FakeFoo object. + // This must be called *before* the custom ON_CALL() statements. + void DelegateToFake() { + ON_CALL(*this, DoThis).WillByDefault([this](int n) { + return fake_.DoThis(n); + }); + ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { + fake_.DoThat(s, p); + }); + } + + private: + FakeFoo fake_; // Keeps an instance of the fake in the mock. +}; +``` + +With that, you can use `MockFoo` in your tests as usual. Just remember that if +you don't explicitly set an action in an `ON_CALL()` or `EXPECT_CALL()`, the +fake will be called upon to do it.: + +```cpp +using ::testing::_; + +TEST(AbcTest, Xyz) { + MockFoo foo; + + foo.DelegateToFake(); // Enables the fake for delegation. + + // Put your ON_CALL(foo, ...)s here, if any. + + // No action specified, meaning to use the default action. + EXPECT_CALL(foo, DoThis(5)); + EXPECT_CALL(foo, DoThat(_, _)); + + int n = 0; + EXPECT_EQ('+', foo.DoThis(5)); // FakeFoo::DoThis() is invoked. + foo.DoThat("Hi", &n); // FakeFoo::DoThat() is invoked. + EXPECT_EQ(2, n); +} +``` + +**Some tips:** + +* If you want, you can still override the default action by providing your own + `ON_CALL()` or using `.WillOnce()` / `.WillRepeatedly()` in `EXPECT_CALL()`. +* In `DelegateToFake()`, you only need to delegate the methods whose fake + implementation you intend to use. + +* The general technique discussed here works for overloaded methods, but + you'll need to tell the compiler which version you mean. To disambiguate a + mock function (the one you specify inside the parentheses of `ON_CALL()`), + use [this technique](#SelectOverload); to disambiguate a fake function (the + one you place inside `Invoke()`), use a `static_cast` to specify the + function's type. For instance, if class `Foo` has methods `char DoThis(int + n)` and `bool DoThis(double x) const`, and you want to invoke the latter, + you need to write `Invoke(&fake_, static_cast(&FakeFoo::DoThis))` instead of `Invoke(&fake_, &FakeFoo::DoThis)` + (The strange-looking thing inside the angled brackets of `static_cast` is + the type of a function pointer to the second `DoThis()` method.). + +* Having to mix a mock and a fake is often a sign of something gone wrong. + Perhaps you haven't got used to the interaction-based way of testing yet. Or + perhaps your interface is taking on too many roles and should be split up. + Therefore, **don't abuse this**. We would only recommend to do it as an + intermediate step when you are refactoring your code. + +Regarding the tip on mixing a mock and a fake, here's an example on why it may +be a bad sign: Suppose you have a class `System` for low-level system +operations. In particular, it does file and I/O operations. And suppose you want +to test how your code uses `System` to do I/O, and you just want the file +operations to work normally. If you mock out the entire `System` class, you'll +have to provide a fake implementation for the file operation part, which +suggests that `System` is taking on too many roles. + +Instead, you can define a `FileOps` interface and an `IOOps` interface and split +`System`'s functionalities into the two. Then you can mock `IOOps` without +mocking `FileOps`. + +### Delegating Calls to a Real Object + +When using testing doubles (mocks, fakes, stubs, and etc), sometimes their +behaviors will differ from those of the real objects. This difference could be +either intentional (as in simulating an error such that you can test the error +handling code) or unintentional. If your mocks have different behaviors than the +real objects by mistake, you could end up with code that passes the tests but +fails in production. + +You can use the *delegating-to-real* technique to ensure that your mock has the +same behavior as the real object while retaining the ability to validate calls. +This technique is very similar to the [delegating-to-fake](#DelegatingToFake) +technique, the difference being that we use a real object instead of a fake. +Here's an example: + +```cpp +using ::testing::AtLeast; + +class MockFoo : public Foo { + public: + MockFoo() { + // By default, all calls are delegated to the real object. + ON_CALL(*this, DoThis).WillByDefault([this](int n) { + return real_.DoThis(n); + }); + ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { + real_.DoThat(s, p); + }); + ... + } + MOCK_METHOD(char, DoThis, ...); + MOCK_METHOD(void, DoThat, ...); + ... + private: + Foo real_; +}; + +... + MockFoo mock; + EXPECT_CALL(mock, DoThis()) + .Times(3); + EXPECT_CALL(mock, DoThat("Hi")) + .Times(AtLeast(1)); + ... use mock in test ... +``` + +With this, gMock will verify that your code made the right calls (with the right +arguments, in the right order, called the right number of times, etc), and a +real object will answer the calls (so the behavior will be the same as in +production). This gives you the best of both worlds. + +### Delegating Calls to a Parent Class + +Ideally, you should code to interfaces, whose methods are all pure virtual. In +reality, sometimes you do need to mock a virtual method that is not pure (i.e, +it already has an implementation). For example: + +```cpp +class Foo { + public: + virtual ~Foo(); + + virtual void Pure(int n) = 0; + virtual int Concrete(const char* str) { ... } +}; + +class MockFoo : public Foo { + public: + // Mocking a pure method. + MOCK_METHOD(void, Pure, (int n), (override)); + // Mocking a concrete method. Foo::Concrete() is shadowed. + MOCK_METHOD(int, Concrete, (const char* str), (override)); +}; +``` + +Sometimes you may want to call `Foo::Concrete()` instead of +`MockFoo::Concrete()`. Perhaps you want to do it as part of a stub action, or +perhaps your test doesn't need to mock `Concrete()` at all (but it would be +oh-so painful to have to define a new mock class whenever you don't need to mock +one of its methods). + +You can call `Foo::Concrete()` inside an action by: + +```cpp +... + EXPECT_CALL(foo, Concrete).WillOnce([&foo](const char* str) { + return foo.Foo::Concrete(str); + }); +``` + +or tell the mock object that you don't want to mock `Concrete()`: + +```cpp +... + ON_CALL(foo, Concrete).WillByDefault([&foo](const char* str) { + return foo.Foo::Concrete(str); + }); +``` + +(Why don't we just write `{ return foo.Concrete(str); }`? If you do that, +`MockFoo::Concrete()` will be called (and cause an infinite recursion) since +`Foo::Concrete()` is virtual. That's just how C++ works.) + +## Using Matchers + +### Matching Argument Values Exactly + +You can specify exactly which arguments a mock method is expecting: + +```cpp +using ::testing::Return; +... + EXPECT_CALL(foo, DoThis(5)) + .WillOnce(Return('a')); + EXPECT_CALL(foo, DoThat("Hello", bar)); +``` + +### Using Simple Matchers + +You can use matchers to match arguments that have a certain property: + +```cpp +using ::testing::NotNull; +using ::testing::Return; +... + EXPECT_CALL(foo, DoThis(Ge(5))) // The argument must be >= 5. + .WillOnce(Return('a')); + EXPECT_CALL(foo, DoThat("Hello", NotNull())); + // The second argument must not be NULL. +``` + +A frequently used matcher is `_`, which matches anything: + +```cpp + EXPECT_CALL(foo, DoThat(_, NotNull())); +``` + +### Combining Matchers {#CombiningMatchers} + +You can build complex matchers from existing ones using `AllOf()`, +`AllOfArray()`, `AnyOf()`, `AnyOfArray()` and `Not()`: + +```cpp +using ::testing::AllOf; +using ::testing::Gt; +using ::testing::HasSubstr; +using ::testing::Ne; +using ::testing::Not; +... + // The argument must be > 5 and != 10. + EXPECT_CALL(foo, DoThis(AllOf(Gt(5), + Ne(10)))); + + // The first argument must not contain sub-string "blah". + EXPECT_CALL(foo, DoThat(Not(HasSubstr("blah")), + NULL)); +``` + +Matchers are function objects, and parametrized matchers can be composed just +like any other function. However because their types can be long and rarely +provide meaningful information, it can be easier to express them with C++14 +generic lambdas to avoid specifying types. For example, + +```cpp +using ::testing::Contains; +using ::testing::Property; + +inline constexpr auto HasFoo = [](const auto& f) { + return Property(&MyClass::foo, Contains(f)); +}; +... + EXPECT_THAT(x, HasFoo("blah")); +``` + +### Casting Matchers {#SafeMatcherCast} + +gMock matchers are statically typed, meaning that the compiler can catch your +mistake if you use a matcher of the wrong type (for example, if you use `Eq(5)` +to match a `string` argument). Good for you! + +Sometimes, however, you know what you're doing and want the compiler to give you +some slack. One example is that you have a matcher for `long` and the argument +you want to match is `int`. While the two types aren't exactly the same, there +is nothing really wrong with using a `Matcher` to match an `int` - after +all, we can first convert the `int` argument to a `long` losslessly before +giving it to the matcher. + +To support this need, gMock gives you the `SafeMatcherCast(m)` function. It +casts a matcher `m` to type `Matcher`. To ensure safety, gMock checks that +(let `U` be the type `m` accepts : + +1. Type `T` can be *implicitly* cast to type `U`; +2. When both `T` and `U` are built-in arithmetic types (`bool`, integers, and + floating-point numbers), the conversion from `T` to `U` is not lossy (in + other words, any value representable by `T` can also be represented by `U`); + and +3. When `U` is a reference, `T` must also be a reference (as the underlying + matcher may be interested in the address of the `U` value). + +The code won't compile if any of these conditions isn't met. + +Here's one example: + +```cpp +using ::testing::SafeMatcherCast; + +// A base class and a child class. +class Base { ... }; +class Derived : public Base { ... }; + +class MockFoo : public Foo { + public: + MOCK_METHOD(void, DoThis, (Derived* derived), (override)); +}; + +... + MockFoo foo; + // m is a Matcher we got from somewhere. + EXPECT_CALL(foo, DoThis(SafeMatcherCast(m))); +``` + +If you find `SafeMatcherCast(m)` too limiting, you can use a similar function +`MatcherCast(m)`. The difference is that `MatcherCast` works as long as you +can `static_cast` type `T` to type `U`. + +`MatcherCast` essentially lets you bypass C++'s type system (`static_cast` isn't +always safe as it could throw away information, for example), so be careful not +to misuse/abuse it. + +### Selecting Between Overloaded Functions {#SelectOverload} + +If you expect an overloaded function to be called, the compiler may need some +help on which overloaded version it is. + +To disambiguate functions overloaded on the const-ness of this object, use the +`Const()` argument wrapper. + +```cpp +using ::testing::ReturnRef; + +class MockFoo : public Foo { + ... + MOCK_METHOD(Bar&, GetBar, (), (override)); + MOCK_METHOD(const Bar&, GetBar, (), (const, override)); +}; + +... + MockFoo foo; + Bar bar1, bar2; + EXPECT_CALL(foo, GetBar()) // The non-const GetBar(). + .WillOnce(ReturnRef(bar1)); + EXPECT_CALL(Const(foo), GetBar()) // The const GetBar(). + .WillOnce(ReturnRef(bar2)); +``` + +(`Const()` is defined by gMock and returns a `const` reference to its argument.) + +To disambiguate overloaded functions with the same number of arguments but +different argument types, you may need to specify the exact type of a matcher, +either by wrapping your matcher in `Matcher()`, or using a matcher whose +type is fixed (`TypedEq`, `An()`, etc): + +```cpp +using ::testing::An; +using ::testing::Matcher; +using ::testing::TypedEq; + +class MockPrinter : public Printer { + public: + MOCK_METHOD(void, Print, (int n), (override)); + MOCK_METHOD(void, Print, (char c), (override)); +}; + +TEST(PrinterTest, Print) { + MockPrinter printer; + + EXPECT_CALL(printer, Print(An())); // void Print(int); + EXPECT_CALL(printer, Print(Matcher(Lt(5)))); // void Print(int); + EXPECT_CALL(printer, Print(TypedEq('a'))); // void Print(char); + + printer.Print(3); + printer.Print(6); + printer.Print('a'); +} +``` + +### Performing Different Actions Based on the Arguments + +When a mock method is called, the *last* matching expectation that's still +active will be selected (think "newer overrides older"). So, you can make a +method do different things depending on its argument values like this: + +```cpp +using ::testing::_; +using ::testing::Lt; +using ::testing::Return; +... + // The default case. + EXPECT_CALL(foo, DoThis(_)) + .WillRepeatedly(Return('b')); + // The more specific case. + EXPECT_CALL(foo, DoThis(Lt(5))) + .WillRepeatedly(Return('a')); +``` + +Now, if `foo.DoThis()` is called with a value less than 5, `'a'` will be +returned; otherwise `'b'` will be returned. + +### Matching Multiple Arguments as a Whole + +Sometimes it's not enough to match the arguments individually. For example, we +may want to say that the first argument must be less than the second argument. +The `With()` clause allows us to match all arguments of a mock function as a +whole. For example, + +```cpp +using ::testing::_; +using ::testing::Ne; +using ::testing::Lt; +... + EXPECT_CALL(foo, InRange(Ne(0), _)) + .With(Lt()); +``` + +says that the first argument of `InRange()` must not be 0, and must be less than +the second argument. + +The expression inside `With()` must be a matcher of type `Matcher>`, where `A1`, ..., `An` are the types of the function arguments. + +You can also write `AllArgs(m)` instead of `m` inside `.With()`. The two forms +are equivalent, but `.With(AllArgs(Lt()))` is more readable than `.With(Lt())`. + +You can use `Args(m)` to match the `n` selected arguments (as a +tuple) against `m`. For example, + +```cpp +using ::testing::_; +using ::testing::AllOf; +using ::testing::Args; +using ::testing::Lt; +... + EXPECT_CALL(foo, Blah) + .With(AllOf(Args<0, 1>(Lt()), Args<1, 2>(Lt()))); +``` + +says that `Blah` will be called with arguments `x`, `y`, and `z` where `x < y < +z`. Note that in this example, it wasn't necessary specify the positional +matchers. + +As a convenience and example, gMock provides some matchers for 2-tuples, +including the `Lt()` matcher above. See +[Multi-argument Matchers](reference/matchers.md#MultiArgMatchers) for the +complete list. + +Note that if you want to pass the arguments to a predicate of your own (e.g. +`.With(Args<0, 1>(Truly(&MyPredicate)))`), that predicate MUST be written to +take a `std::tuple` as its argument; gMock will pass the `n` selected arguments +as *one* single tuple to the predicate. + +### Using Matchers as Predicates + +Have you noticed that a matcher is just a fancy predicate that also knows how to +describe itself? Many existing algorithms take predicates as arguments (e.g. +those defined in STL's `` header), and it would be a shame if gMock +matchers were not allowed to participate. + +Luckily, you can use a matcher where a unary predicate functor is expected by +wrapping it inside the `Matches()` function. For example, + +```cpp +#include +#include + +using ::testing::Matches; +using ::testing::Ge; + +vector v; +... +// How many elements in v are >= 10? +const int count = count_if(v.begin(), v.end(), Matches(Ge(10))); +``` + +Since you can build complex matchers from simpler ones easily using gMock, this +gives you a way to conveniently construct composite predicates (doing the same +using STL's `` header is just painful). For example, here's a +predicate that's satisfied by any number that is >= 0, <= 100, and != 50: + +```cpp +using testing::AllOf; +using testing::Ge; +using testing::Le; +using testing::Matches; +using testing::Ne; +... +Matches(AllOf(Ge(0), Le(100), Ne(50))) +``` + +### Using Matchers in googletest Assertions + +See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions +Reference. + +### Using Predicates as Matchers + +gMock provides a set of built-in matchers for matching arguments with expected +values—see the [Matchers Reference](reference/matchers.md) for more information. +In case you find the built-in set lacking, you can use an arbitrary unary +predicate function or functor as a matcher - as long as the predicate accepts a +value of the type you want. You do this by wrapping the predicate inside the +`Truly()` function, for example: + +```cpp +using ::testing::Truly; + +int IsEven(int n) { return (n % 2) == 0 ? 1 : 0; } +... + // Bar() must be called with an even number. + EXPECT_CALL(foo, Bar(Truly(IsEven))); +``` + +Note that the predicate function / functor doesn't have to return `bool`. It +works as long as the return value can be used as the condition in in statement +`if (condition) ...`. + +### Matching Arguments that Are Not Copyable + +When you do an `EXPECT_CALL(mock_obj, Foo(bar))`, gMock saves away a copy of +`bar`. When `Foo()` is called later, gMock compares the argument to `Foo()` with +the saved copy of `bar`. This way, you don't need to worry about `bar` being +modified or destroyed after the `EXPECT_CALL()` is executed. The same is true +when you use matchers like `Eq(bar)`, `Le(bar)`, and so on. + +But what if `bar` cannot be copied (i.e. has no copy constructor)? You could +define your own matcher function or callback and use it with `Truly()`, as the +previous couple of recipes have shown. Or, you may be able to get away from it +if you can guarantee that `bar` won't be changed after the `EXPECT_CALL()` is +executed. Just tell gMock that it should save a reference to `bar`, instead of a +copy of it. Here's how: + +```cpp +using ::testing::Eq; +using ::testing::Lt; +... + // Expects that Foo()'s argument == bar. + EXPECT_CALL(mock_obj, Foo(Eq(std::ref(bar)))); + + // Expects that Foo()'s argument < bar. + EXPECT_CALL(mock_obj, Foo(Lt(std::ref(bar)))); +``` + +Remember: if you do this, don't change `bar` after the `EXPECT_CALL()`, or the +result is undefined. + +### Validating a Member of an Object + +Often a mock function takes a reference to object as an argument. When matching +the argument, you may not want to compare the entire object against a fixed +object, as that may be over-specification. Instead, you may need to validate a +certain member variable or the result of a certain getter method of the object. +You can do this with `Field()` and `Property()`. More specifically, + +```cpp +Field(&Foo::bar, m) +``` + +is a matcher that matches a `Foo` object whose `bar` member variable satisfies +matcher `m`. + +```cpp +Property(&Foo::baz, m) +``` + +is a matcher that matches a `Foo` object whose `baz()` method returns a value +that satisfies matcher `m`. + +For example: + +| Expression | Description | +| :--------------------------- | :--------------------------------------- | +| `Field(&Foo::number, Ge(3))` | Matches `x` where `x.number >= 3`. | +| `Property(&Foo::name, StartsWith("John "))` | Matches `x` where `x.name()` starts with `"John "`. | + +Note that in `Property(&Foo::baz, ...)`, method `baz()` must take no argument +and be declared as `const`. Don't use `Property()` against member functions that +you do not own, because taking addresses of functions is fragile and generally +not part of the contract of the function. + +`Field()` and `Property()` can also match plain pointers to objects. For +instance, + +```cpp +using ::testing::Field; +using ::testing::Ge; +... +Field(&Foo::number, Ge(3)) +``` + +matches a plain pointer `p` where `p->number >= 3`. If `p` is `NULL`, the match +will always fail regardless of the inner matcher. + +What if you want to validate more than one members at the same time? Remember +that there are [`AllOf()` and `AllOfArray()`](#CombiningMatchers). + +Finally `Field()` and `Property()` provide overloads that take the field or +property names as the first argument to include it in the error message. This +can be useful when creating combined matchers. + +```cpp +using ::testing::AllOf; +using ::testing::Field; +using ::testing::Matcher; +using ::testing::SafeMatcherCast; + +Matcher IsFoo(const Foo& foo) { + return AllOf(Field("some_field", &Foo::some_field, foo.some_field), + Field("other_field", &Foo::other_field, foo.other_field), + Field("last_field", &Foo::last_field, foo.last_field)); +} +``` + +### Validating the Value Pointed to by a Pointer Argument + +C++ functions often take pointers as arguments. You can use matchers like +`IsNull()`, `NotNull()`, and other comparison matchers to match a pointer, but +what if you want to make sure the value *pointed to* by the pointer, instead of +the pointer itself, has a certain property? Well, you can use the `Pointee(m)` +matcher. + +`Pointee(m)` matches a pointer if and only if `m` matches the value the pointer +points to. For example: + +```cpp +using ::testing::Ge; +using ::testing::Pointee; +... + EXPECT_CALL(foo, Bar(Pointee(Ge(3)))); +``` + +expects `foo.Bar()` to be called with a pointer that points to a value greater +than or equal to 3. + +One nice thing about `Pointee()` is that it treats a `NULL` pointer as a match +failure, so you can write `Pointee(m)` instead of + +```cpp +using ::testing::AllOf; +using ::testing::NotNull; +using ::testing::Pointee; +... + AllOf(NotNull(), Pointee(m)) +``` + +without worrying that a `NULL` pointer will crash your test. + +Also, did we tell you that `Pointee()` works with both raw pointers **and** +smart pointers (`std::unique_ptr`, `std::shared_ptr`, etc)? + +What if you have a pointer to pointer? You guessed it - you can use nested +`Pointee()` to probe deeper inside the value. For example, +`Pointee(Pointee(Lt(3)))` matches a pointer that points to a pointer that points +to a number less than 3 (what a mouthful...). + +### Testing a Certain Property of an Object + +Sometimes you want to specify that an object argument has a certain property, +but there is no existing matcher that does this. If you want good error +messages, you should [define a matcher](#NewMatchers). If you want to do it +quick and dirty, you could get away with writing an ordinary function. + +Let's say you have a mock function that takes an object of type `Foo`, which has +an `int bar()` method and an `int baz()` method, and you want to constrain that +the argument's `bar()` value plus its `baz()` value is a given number. Here's +how you can define a matcher to do it: + +```cpp +using ::testing::Matcher; + +class BarPlusBazEqMatcher { + public: + explicit BarPlusBazEqMatcher(int expected_sum) + : expected_sum_(expected_sum) {} + + bool MatchAndExplain(const Foo& foo, + std::ostream* /* listener */) const { + return (foo.bar() + foo.baz()) == expected_sum_; + } + + void DescribeTo(std::ostream& os) const { + os << "bar() + baz() equals " << expected_sum_; + } + + void DescribeNegationTo(std::ostream& os) const { + os << "bar() + baz() does not equal " << expected_sum_; + } + private: + const int expected_sum_; +}; + +Matcher BarPlusBazEq(int expected_sum) { + return BarPlusBazEqMatcher(expected_sum); +} + +... + EXPECT_CALL(..., DoThis(BarPlusBazEq(5)))...; +``` + +### Matching Containers + +Sometimes an STL container (e.g. list, vector, map, ...) is passed to a mock +function and you may want to validate it. Since most STL containers support the +`==` operator, you can write `Eq(expected_container)` or simply +`expected_container` to match a container exactly. + +Sometimes, though, you may want to be more flexible (for example, the first +element must be an exact match, but the second element can be any positive +number, and so on). Also, containers used in tests often have a small number of +elements, and having to define the expected container out-of-line is a bit of a +hassle. + +You can use the `ElementsAre()` or `UnorderedElementsAre()` matcher in such +cases: + +```cpp +using ::testing::_; +using ::testing::ElementsAre; +using ::testing::Gt; +... + MOCK_METHOD(void, Foo, (const vector& numbers), (override)); +... + EXPECT_CALL(mock, Foo(ElementsAre(1, Gt(0), _, 5))); +``` + +The above matcher says that the container must have 4 elements, which must be 1, +greater than 0, anything, and 5 respectively. + +If you instead write: + +```cpp +using ::testing::_; +using ::testing::Gt; +using ::testing::UnorderedElementsAre; +... + MOCK_METHOD(void, Foo, (const vector& numbers), (override)); +... + EXPECT_CALL(mock, Foo(UnorderedElementsAre(1, Gt(0), _, 5))); +``` + +It means that the container must have 4 elements, which (under some permutation) +must be 1, greater than 0, anything, and 5 respectively. + +As an alternative you can place the arguments in a C-style array and use +`ElementsAreArray()` or `UnorderedElementsAreArray()` instead: + +```cpp +using ::testing::ElementsAreArray; +... + // ElementsAreArray accepts an array of element values. + const int expected_vector1[] = {1, 5, 2, 4, ...}; + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector1))); + + // Or, an array of element matchers. + Matcher expected_vector2[] = {1, Gt(2), _, 3, ...}; + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector2))); +``` + +In case the array needs to be dynamically created (and therefore the array size +cannot be inferred by the compiler), you can give `ElementsAreArray()` an +additional argument to specify the array size: + +```cpp +using ::testing::ElementsAreArray; +... + int* const expected_vector3 = new int[count]; + ... fill expected_vector3 with values ... + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector3, count))); +``` + +Use `Pair` when comparing maps or other associative containers. + +{% raw %} + +```cpp +using testing::ElementsAre; +using testing::Pair; +... + std::map m = {{"a", 1}, {"b", 2}, {"c", 3}}; + EXPECT_THAT(m, ElementsAre(Pair("a", 1), Pair("b", 2), Pair("c", 3))); +``` + +{% endraw %} + +**Tips:** + +* `ElementsAre*()` can be used to match *any* container that implements the + STL iterator pattern (i.e. it has a `const_iterator` type and supports + `begin()/end()`), not just the ones defined in STL. It will even work with + container types yet to be written - as long as they follows the above + pattern. +* You can use nested `ElementsAre*()` to match nested (multi-dimensional) + containers. +* If the container is passed by pointer instead of by reference, just write + `Pointee(ElementsAre*(...))`. +* The order of elements *matters* for `ElementsAre*()`. If you are using it + with containers whose element order are undefined (e.g. `hash_map`) you + should use `WhenSorted` around `ElementsAre`. + +### Sharing Matchers + +Under the hood, a gMock matcher object consists of a pointer to a ref-counted +implementation object. Copying matchers is allowed and very efficient, as only +the pointer is copied. When the last matcher that references the implementation +object dies, the implementation object will be deleted. + +Therefore, if you have some complex matcher that you want to use again and +again, there is no need to build it everytime. Just assign it to a matcher +variable and use that variable repeatedly! For example, + +```cpp +using ::testing::AllOf; +using ::testing::Gt; +using ::testing::Le; +using ::testing::Matcher; +... + Matcher in_range = AllOf(Gt(5), Le(10)); + ... use in_range as a matcher in multiple EXPECT_CALLs ... +``` + +### Matchers must have no side-effects {#PureMatchers} + +{: .callout .warning} +WARNING: gMock does not guarantee when or how many times a matcher will be +invoked. Therefore, all matchers must be *purely functional*: they cannot have +any side effects, and the match result must not depend on anything other than +the matcher's parameters and the value being matched. + +This requirement must be satisfied no matter how a matcher is defined (e.g., if +it is one of the standard matchers, or a custom matcher). In particular, a +matcher can never call a mock function, as that will affect the state of the +mock object and gMock. + +## Setting Expectations + +### Knowing When to Expect {#UseOnCall} + +**`ON_CALL`** is likely the *single most under-utilized construct* in gMock. + +There are basically two constructs for defining the behavior of a mock object: +`ON_CALL` and `EXPECT_CALL`. The difference? `ON_CALL` defines what happens when +a mock method is called, but doesn't imply any expectation on the method +being called. `EXPECT_CALL` not only defines the behavior, but also sets an +expectation that the method will be called with the given arguments, for the +given number of times (and *in the given order* when you specify the order +too). + +Since `EXPECT_CALL` does more, isn't it better than `ON_CALL`? Not really. Every +`EXPECT_CALL` adds a constraint on the behavior of the code under test. Having +more constraints than necessary is *baaad* - even worse than not having enough +constraints. + +This may be counter-intuitive. How could tests that verify more be worse than +tests that verify less? Isn't verification the whole point of tests? + +The answer lies in *what* a test should verify. **A good test verifies the +contract of the code.** If a test over-specifies, it doesn't leave enough +freedom to the implementation. As a result, changing the implementation without +breaking the contract (e.g. refactoring and optimization), which should be +perfectly fine to do, can break such tests. Then you have to spend time fixing +them, only to see them broken again the next time the implementation is changed. + +Keep in mind that one doesn't have to verify more than one property in one test. +In fact, **it's a good style to verify only one thing in one test.** If you do +that, a bug will likely break only one or two tests instead of dozens (which +case would you rather debug?). If you are also in the habit of giving tests +descriptive names that tell what they verify, you can often easily guess what's +wrong just from the test log itself. + +So use `ON_CALL` by default, and only use `EXPECT_CALL` when you actually intend +to verify that the call is made. For example, you may have a bunch of `ON_CALL`s +in your test fixture to set the common mock behavior shared by all tests in the +same group, and write (scarcely) different `EXPECT_CALL`s in different `TEST_F`s +to verify different aspects of the code's behavior. Compared with the style +where each `TEST` has many `EXPECT_CALL`s, this leads to tests that are more +resilient to implementational changes (and thus less likely to require +maintenance) and makes the intent of the tests more obvious (so they are easier +to maintain when you do need to maintain them). + +If you are bothered by the "Uninteresting mock function call" message printed +when a mock method without an `EXPECT_CALL` is called, you may use a `NiceMock` +instead to suppress all such messages for the mock object, or suppress the +message for specific methods by adding `EXPECT_CALL(...).Times(AnyNumber())`. DO +NOT suppress it by blindly adding an `EXPECT_CALL(...)`, or you'll have a test +that's a pain to maintain. + +### Ignoring Uninteresting Calls + +If you are not interested in how a mock method is called, just don't say +anything about it. In this case, if the method is ever called, gMock will +perform its default action to allow the test program to continue. If you are not +happy with the default action taken by gMock, you can override it using +`DefaultValue::Set()` (described [here](#DefaultValue)) or `ON_CALL()`. + +Please note that once you expressed interest in a particular mock method (via +`EXPECT_CALL()`), all invocations to it must match some expectation. If this +function is called but the arguments don't match any `EXPECT_CALL()` statement, +it will be an error. + +### Disallowing Unexpected Calls + +If a mock method shouldn't be called at all, explicitly say so: + +```cpp +using ::testing::_; +... + EXPECT_CALL(foo, Bar(_)) + .Times(0); +``` + +If some calls to the method are allowed, but the rest are not, just list all the +expected calls: + +```cpp +using ::testing::AnyNumber; +using ::testing::Gt; +... + EXPECT_CALL(foo, Bar(5)); + EXPECT_CALL(foo, Bar(Gt(10))) + .Times(AnyNumber()); +``` + +A call to `foo.Bar()` that doesn't match any of the `EXPECT_CALL()` statements +will be an error. + +### Understanding Uninteresting vs Unexpected Calls {#uninteresting-vs-unexpected} + +*Uninteresting* calls and *unexpected* calls are different concepts in gMock. +*Very* different. + +A call `x.Y(...)` is **uninteresting** if there's *not even a single* +`EXPECT_CALL(x, Y(...))` set. In other words, the test isn't interested in the +`x.Y()` method at all, as evident in that the test doesn't care to say anything +about it. + +A call `x.Y(...)` is **unexpected** if there are *some* `EXPECT_CALL(x, +Y(...))`s set, but none of them matches the call. Put another way, the test is +interested in the `x.Y()` method (therefore it explicitly sets some +`EXPECT_CALL` to verify how it's called); however, the verification fails as the +test doesn't expect this particular call to happen. + +**An unexpected call is always an error,** as the code under test doesn't behave +the way the test expects it to behave. + +**By default, an uninteresting call is not an error,** as it violates no +constraint specified by the test. (gMock's philosophy is that saying nothing +means there is no constraint.) However, it leads to a warning, as it *might* +indicate a problem (e.g. the test author might have forgotten to specify a +constraint). + +In gMock, `NiceMock` and `StrictMock` can be used to make a mock class "nice" or +"strict". How does this affect uninteresting calls and unexpected calls? + +A **nice mock** suppresses uninteresting call *warnings*. It is less chatty than +the default mock, but otherwise is the same. If a test fails with a default +mock, it will also fail using a nice mock instead. And vice versa. Don't expect +making a mock nice to change the test's result. + +A **strict mock** turns uninteresting call warnings into errors. So making a +mock strict may change the test's result. + +Let's look at an example: + +```cpp +TEST(...) { + NiceMock mock_registry; + EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) + .WillRepeatedly(Return("Larry Page")); + + // Use mock_registry in code under test. + ... &mock_registry ... +} +``` + +The sole `EXPECT_CALL` here says that all calls to `GetDomainOwner()` must have +`"google.com"` as the argument. If `GetDomainOwner("yahoo.com")` is called, it +will be an unexpected call, and thus an error. *Having a nice mock doesn't +change the severity of an unexpected call.* + +So how do we tell gMock that `GetDomainOwner()` can be called with some other +arguments as well? The standard technique is to add a "catch all" `EXPECT_CALL`: + +```cpp + EXPECT_CALL(mock_registry, GetDomainOwner(_)) + .Times(AnyNumber()); // catches all other calls to this method. + EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) + .WillRepeatedly(Return("Larry Page")); +``` + +Remember that `_` is the wildcard matcher that matches anything. With this, if +`GetDomainOwner("google.com")` is called, it will do what the second +`EXPECT_CALL` says; if it is called with a different argument, it will do what +the first `EXPECT_CALL` says. + +Note that the order of the two `EXPECT_CALL`s is important, as a newer +`EXPECT_CALL` takes precedence over an older one. + +For more on uninteresting calls, nice mocks, and strict mocks, read +["The Nice, the Strict, and the Naggy"](#NiceStrictNaggy). + +### Ignoring Uninteresting Arguments {#ParameterlessExpectations} + +If your test doesn't care about the parameters (it only cares about the number +or order of calls), you can often simply omit the parameter list: + +```cpp + // Expect foo.Bar( ... ) twice with any arguments. + EXPECT_CALL(foo, Bar).Times(2); + + // Delegate to the given method whenever the factory is invoked. + ON_CALL(foo_factory, MakeFoo) + .WillByDefault(&BuildFooForTest); +``` + +This functionality is only available when a method is not overloaded; to prevent +unexpected behavior it is a compilation error to try to set an expectation on a +method where the specific overload is ambiguous. You can work around this by +supplying a [simpler mock interface](#SimplerInterfaces) than the mocked class +provides. + +This pattern is also useful when the arguments are interesting, but match logic +is substantially complex. You can leave the argument list unspecified and use +SaveArg actions to [save the values for later verification](#SaveArgVerify). If +you do that, you can easily differentiate calling the method the wrong number of +times from calling it with the wrong arguments. + +### Expecting Ordered Calls {#OrderedCalls} + +Although an `EXPECT_CALL()` statement defined later takes precedence when gMock +tries to match a function call with an expectation, by default calls don't have +to happen in the order `EXPECT_CALL()` statements are written. For example, if +the arguments match the matchers in the second `EXPECT_CALL()`, but not those in +the first and third, then the second expectation will be used. + +If you would rather have all calls occur in the order of the expectations, put +the `EXPECT_CALL()` statements in a block where you define a variable of type +`InSequence`: + +```cpp +using ::testing::_; +using ::testing::InSequence; + + { + InSequence s; + + EXPECT_CALL(foo, DoThis(5)); + EXPECT_CALL(bar, DoThat(_)) + .Times(2); + EXPECT_CALL(foo, DoThis(6)); + } +``` + +In this example, we expect a call to `foo.DoThis(5)`, followed by two calls to +`bar.DoThat()` where the argument can be anything, which are in turn followed by +a call to `foo.DoThis(6)`. If a call occurred out-of-order, gMock will report an +error. + +### Expecting Partially Ordered Calls {#PartialOrder} + +Sometimes requiring everything to occur in a predetermined order can lead to +brittle tests. For example, we may care about `A` occurring before both `B` and +`C`, but aren't interested in the relative order of `B` and `C`. In this case, +the test should reflect our real intent, instead of being overly constraining. + +gMock allows you to impose an arbitrary DAG (directed acyclic graph) on the +calls. One way to express the DAG is to use the +[`After` clause](reference/mocking.md#EXPECT_CALL.After) of `EXPECT_CALL`. + +Another way is via the `InSequence()` clause (not the same as the `InSequence` +class), which we borrowed from jMock 2. It's less flexible than `After()`, but +more convenient when you have long chains of sequential calls, as it doesn't +require you to come up with different names for the expectations in the chains. +Here's how it works: + +If we view `EXPECT_CALL()` statements as nodes in a graph, and add an edge from +node A to node B wherever A must occur before B, we can get a DAG. We use the +term "sequence" to mean a directed path in this DAG. Now, if we decompose the +DAG into sequences, we just need to know which sequences each `EXPECT_CALL()` +belongs to in order to be able to reconstruct the original DAG. + +So, to specify the partial order on the expectations we need to do two things: +first to define some `Sequence` objects, and then for each `EXPECT_CALL()` say +which `Sequence` objects it is part of. + +Expectations in the same sequence must occur in the order they are written. For +example, + +```cpp +using ::testing::Sequence; +... + Sequence s1, s2; + + EXPECT_CALL(foo, A()) + .InSequence(s1, s2); + EXPECT_CALL(bar, B()) + .InSequence(s1); + EXPECT_CALL(bar, C()) + .InSequence(s2); + EXPECT_CALL(foo, D()) + .InSequence(s2); +``` + +specifies the following DAG (where `s1` is `A -> B`, and `s2` is `A -> C -> D`): + +```text + +---> B + | + A ---| + | + +---> C ---> D +``` + +This means that A must occur before B and C, and C must occur before D. There's +no restriction about the order other than these. + +### Controlling When an Expectation Retires + +When a mock method is called, gMock only considers expectations that are still +active. An expectation is active when created, and becomes inactive (aka +*retires*) when a call that has to occur later has occurred. For example, in + +```cpp +using ::testing::_; +using ::testing::Sequence; +... + Sequence s1, s2; + + EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #1 + .Times(AnyNumber()) + .InSequence(s1, s2); + EXPECT_CALL(log, Log(WARNING, _, "Data set is empty.")) // #2 + .InSequence(s1); + EXPECT_CALL(log, Log(WARNING, _, "User not found.")) // #3 + .InSequence(s2); +``` + +as soon as either #2 or #3 is matched, #1 will retire. If a warning `"File too +large."` is logged after this, it will be an error. + +Note that an expectation doesn't retire automatically when it's saturated. For +example, + +```cpp +using ::testing::_; +... + EXPECT_CALL(log, Log(WARNING, _, _)); // #1 + EXPECT_CALL(log, Log(WARNING, _, "File too large.")); // #2 +``` + +says that there will be exactly one warning with the message `"File too +large."`. If the second warning contains this message too, #2 will match again +and result in an upper-bound-violated error. + +If this is not what you want, you can ask an expectation to retire as soon as it +becomes saturated: + +```cpp +using ::testing::_; +... + EXPECT_CALL(log, Log(WARNING, _, _)); // #1 + EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #2 + .RetiresOnSaturation(); +``` + +Here #2 can be used only once, so if you have two warnings with the message +`"File too large."`, the first will match #2 and the second will match #1 - +there will be no error. + +## Using Actions + +### Returning References from Mock Methods + +If a mock function's return type is a reference, you need to use `ReturnRef()` +instead of `Return()` to return a result: + +```cpp +using ::testing::ReturnRef; + +class MockFoo : public Foo { + public: + MOCK_METHOD(Bar&, GetBar, (), (override)); +}; +... + MockFoo foo; + Bar bar; + EXPECT_CALL(foo, GetBar()) + .WillOnce(ReturnRef(bar)); +... +``` + +### Returning Live Values from Mock Methods + +The `Return(x)` action saves a copy of `x` when the action is created, and +always returns the same value whenever it's executed. Sometimes you may want to +instead return the *live* value of `x` (i.e. its value at the time when the +action is *executed*.). Use either `ReturnRef()` or `ReturnPointee()` for this +purpose. + +If the mock function's return type is a reference, you can do it using +`ReturnRef(x)`, as shown in the previous recipe ("Returning References from Mock +Methods"). However, gMock doesn't let you use `ReturnRef()` in a mock function +whose return type is not a reference, as doing that usually indicates a user +error. So, what shall you do? + +Though you may be tempted, DO NOT use `std::ref()`: + +```cpp +using testing::Return; + +class MockFoo : public Foo { + public: + MOCK_METHOD(int, GetValue, (), (override)); +}; +... + int x = 0; + MockFoo foo; + EXPECT_CALL(foo, GetValue()) + .WillRepeatedly(Return(std::ref(x))); // Wrong! + x = 42; + EXPECT_EQ(42, foo.GetValue()); +``` + +Unfortunately, it doesn't work here. The above code will fail with error: + +```text +Value of: foo.GetValue() + Actual: 0 +Expected: 42 +``` + +The reason is that `Return(*value*)` converts `value` to the actual return type +of the mock function at the time when the action is *created*, not when it is +*executed*. (This behavior was chosen for the action to be safe when `value` is +a proxy object that references some temporary objects.) As a result, +`std::ref(x)` is converted to an `int` value (instead of a `const int&`) when +the expectation is set, and `Return(std::ref(x))` will always return 0. + +`ReturnPointee(pointer)` was provided to solve this problem specifically. It +returns the value pointed to by `pointer` at the time the action is *executed*: + +```cpp +using testing::ReturnPointee; +... + int x = 0; + MockFoo foo; + EXPECT_CALL(foo, GetValue()) + .WillRepeatedly(ReturnPointee(&x)); // Note the & here. + x = 42; + EXPECT_EQ(42, foo.GetValue()); // This will succeed now. +``` + +### Combining Actions + +Want to do more than one thing when a function is called? That's fine. `DoAll()` +allow you to do sequence of actions every time. Only the return value of the +last action in the sequence will be used. + +```cpp +using ::testing::_; +using ::testing::DoAll; + +class MockFoo : public Foo { + public: + MOCK_METHOD(bool, Bar, (int n), (override)); +}; +... + EXPECT_CALL(foo, Bar(_)) + .WillOnce(DoAll(action_1, + action_2, + ... + action_n)); +``` + +### Verifying Complex Arguments {#SaveArgVerify} + +If you want to verify that a method is called with a particular argument but the +match criteria is complex, it can be difficult to distinguish between +cardinality failures (calling the method the wrong number of times) and argument +match failures. Similarly, if you are matching multiple parameters, it may not +be easy to distinguishing which argument failed to match. For example: + +```cpp + // Not ideal: this could fail because of a problem with arg1 or arg2, or maybe + // just the method wasn't called. + EXPECT_CALL(foo, SendValues(_, ElementsAre(1, 4, 4, 7), EqualsProto( ... ))); +``` + +You can instead save the arguments and test them individually: + +```cpp + EXPECT_CALL(foo, SendValues) + .WillOnce(DoAll(SaveArg<1>(&actual_array), SaveArg<2>(&actual_proto))); + ... run the test + EXPECT_THAT(actual_array, ElementsAre(1, 4, 4, 7)); + EXPECT_THAT(actual_proto, EqualsProto( ... )); +``` + +### Mocking Side Effects {#MockingSideEffects} + +Sometimes a method exhibits its effect not via returning a value but via side +effects. For example, it may change some global state or modify an output +argument. To mock side effects, in general you can define your own action by +implementing `::testing::ActionInterface`. + +If all you need to do is to change an output argument, the built-in +`SetArgPointee()` action is convenient: + +```cpp +using ::testing::_; +using ::testing::SetArgPointee; + +class MockMutator : public Mutator { + public: + MOCK_METHOD(void, Mutate, (bool mutate, int* value), (override)); + ... +} +... + MockMutator mutator; + EXPECT_CALL(mutator, Mutate(true, _)) + .WillOnce(SetArgPointee<1>(5)); +``` + +In this example, when `mutator.Mutate()` is called, we will assign 5 to the +`int` variable pointed to by argument #1 (0-based). + +`SetArgPointee()` conveniently makes an internal copy of the value you pass to +it, removing the need to keep the value in scope and alive. The implication +however is that the value must have a copy constructor and assignment operator. + +If the mock method also needs to return a value as well, you can chain +`SetArgPointee()` with `Return()` using `DoAll()`, remembering to put the +`Return()` statement last: + +```cpp +using ::testing::_; +using ::testing::Return; +using ::testing::SetArgPointee; + +class MockMutator : public Mutator { + public: + ... + MOCK_METHOD(bool, MutateInt, (int* value), (override)); +} +... + MockMutator mutator; + EXPECT_CALL(mutator, MutateInt(_)) + .WillOnce(DoAll(SetArgPointee<0>(5), + Return(true))); +``` + +Note, however, that if you use the `ReturnOKWith()` method, it will override the +values provided by `SetArgPointee()` in the response parameters of your function +call. + +If the output argument is an array, use the `SetArrayArgument(first, last)` +action instead. It copies the elements in source range `[first, last)` to the +array pointed to by the `N`-th (0-based) argument: + +```cpp +using ::testing::NotNull; +using ::testing::SetArrayArgument; + +class MockArrayMutator : public ArrayMutator { + public: + MOCK_METHOD(void, Mutate, (int* values, int num_values), (override)); + ... +} +... + MockArrayMutator mutator; + int values[5] = {1, 2, 3, 4, 5}; + EXPECT_CALL(mutator, Mutate(NotNull(), 5)) + .WillOnce(SetArrayArgument<0>(values, values + 5)); +``` + +This also works when the argument is an output iterator: + +```cpp +using ::testing::_; +using ::testing::SetArrayArgument; + +class MockRolodex : public Rolodex { + public: + MOCK_METHOD(void, GetNames, (std::back_insert_iterator>), + (override)); + ... +} +... + MockRolodex rolodex; + vector names; + names.push_back("George"); + names.push_back("John"); + names.push_back("Thomas"); + EXPECT_CALL(rolodex, GetNames(_)) + .WillOnce(SetArrayArgument<0>(names.begin(), names.end())); +``` + +### Changing a Mock Object's Behavior Based on the State + +If you expect a call to change the behavior of a mock object, you can use +`::testing::InSequence` to specify different behaviors before and after the +call: + +```cpp +using ::testing::InSequence; +using ::testing::Return; + +... + { + InSequence seq; + EXPECT_CALL(my_mock, IsDirty()) + .WillRepeatedly(Return(true)); + EXPECT_CALL(my_mock, Flush()); + EXPECT_CALL(my_mock, IsDirty()) + .WillRepeatedly(Return(false)); + } + my_mock.FlushIfDirty(); +``` + +This makes `my_mock.IsDirty()` return `true` before `my_mock.Flush()` is called +and return `false` afterwards. + +If the behavior change is more complex, you can store the effects in a variable +and make a mock method get its return value from that variable: + +```cpp +using ::testing::_; +using ::testing::SaveArg; +using ::testing::Return; + +ACTION_P(ReturnPointee, p) { return *p; } +... + int previous_value = 0; + EXPECT_CALL(my_mock, GetPrevValue) + .WillRepeatedly(ReturnPointee(&previous_value)); + EXPECT_CALL(my_mock, UpdateValue) + .WillRepeatedly(SaveArg<0>(&previous_value)); + my_mock.DoSomethingToUpdateValue(); +``` + +Here `my_mock.GetPrevValue()` will always return the argument of the last +`UpdateValue()` call. + +### Setting the Default Value for a Return Type {#DefaultValue} + +If a mock method's return type is a built-in C++ type or pointer, by default it +will return 0 when invoked. Also, in C++ 11 and above, a mock method whose +return type has a default constructor will return a default-constructed value by +default. You only need to specify an action if this default value doesn't work +for you. + +Sometimes, you may want to change this default value, or you may want to specify +a default value for types gMock doesn't know about. You can do this using the +`::testing::DefaultValue` class template: + +```cpp +using ::testing::DefaultValue; + +class MockFoo : public Foo { + public: + MOCK_METHOD(Bar, CalculateBar, (), (override)); +}; + + +... + Bar default_bar; + // Sets the default return value for type Bar. + DefaultValue::Set(default_bar); + + MockFoo foo; + + // We don't need to specify an action here, as the default + // return value works for us. + EXPECT_CALL(foo, CalculateBar()); + + foo.CalculateBar(); // This should return default_bar. + + // Unsets the default return value. + DefaultValue::Clear(); +``` + +Please note that changing the default value for a type can make your tests hard +to understand. We recommend you to use this feature judiciously. For example, +you may want to make sure the `Set()` and `Clear()` calls are right next to the +code that uses your mock. + +### Setting the Default Actions for a Mock Method + +You've learned how to change the default value of a given type. However, this +may be too coarse for your purpose: perhaps you have two mock methods with the +same return type and you want them to have different behaviors. The `ON_CALL()` +macro allows you to customize your mock's behavior at the method level: + +```cpp +using ::testing::_; +using ::testing::AnyNumber; +using ::testing::Gt; +using ::testing::Return; +... + ON_CALL(foo, Sign(_)) + .WillByDefault(Return(-1)); + ON_CALL(foo, Sign(0)) + .WillByDefault(Return(0)); + ON_CALL(foo, Sign(Gt(0))) + .WillByDefault(Return(1)); + + EXPECT_CALL(foo, Sign(_)) + .Times(AnyNumber()); + + foo.Sign(5); // This should return 1. + foo.Sign(-9); // This should return -1. + foo.Sign(0); // This should return 0. +``` + +As you may have guessed, when there are more than one `ON_CALL()` statements, +the newer ones in the order take precedence over the older ones. In other words, +the **last** one that matches the function arguments will be used. This matching +order allows you to set up the common behavior in a mock object's constructor or +the test fixture's set-up phase and specialize the mock's behavior later. + +Note that both `ON_CALL` and `EXPECT_CALL` have the same "later statements take +precedence" rule, but they don't interact. That is, `EXPECT_CALL`s have their +own precedence order distinct from the `ON_CALL` precedence order. + +### Using Functions/Methods/Functors/Lambdas as Actions {#FunctionsAsActions} + +If the built-in actions don't suit you, you can use an existing callable +(function, `std::function`, method, functor, lambda) as an action. + +```cpp +using ::testing::_; using ::testing::Invoke; + +class MockFoo : public Foo { + public: + MOCK_METHOD(int, Sum, (int x, int y), (override)); + MOCK_METHOD(bool, ComplexJob, (int x), (override)); +}; + +int CalculateSum(int x, int y) { return x + y; } +int Sum3(int x, int y, int z) { return x + y + z; } + +class Helper { + public: + bool ComplexJob(int x); +}; + +... + MockFoo foo; + Helper helper; + EXPECT_CALL(foo, Sum(_, _)) + .WillOnce(&CalculateSum) + .WillRepeatedly(Invoke(NewPermanentCallback(Sum3, 1))); + EXPECT_CALL(foo, ComplexJob(_)) + .WillOnce(Invoke(&helper, &Helper::ComplexJob)) + .WillOnce([] { return true; }) + .WillRepeatedly([](int x) { return x > 0; }); + + foo.Sum(5, 6); // Invokes CalculateSum(5, 6). + foo.Sum(2, 3); // Invokes Sum3(1, 2, 3). + foo.ComplexJob(10); // Invokes helper.ComplexJob(10). + foo.ComplexJob(-1); // Invokes the inline lambda. +``` + +The only requirement is that the type of the function, etc must be *compatible* +with the signature of the mock function, meaning that the latter's arguments (if +it takes any) can be implicitly converted to the corresponding arguments of the +former, and the former's return type can be implicitly converted to that of the +latter. So, you can invoke something whose type is *not* exactly the same as the +mock function, as long as it's safe to do so - nice, huh? + +Note that: + +* The action takes ownership of the callback and will delete it when the + action itself is destructed. +* If the type of a callback is derived from a base callback type `C`, you need + to implicitly cast it to `C` to resolve the overloading, e.g. + + ```cpp + using ::testing::Invoke; + ... + ResultCallback* is_ok = ...; + ... Invoke(is_ok) ...; // This works. + + BlockingClosure* done = new BlockingClosure; + ... Invoke(implicit_cast(done)) ...; // The cast is necessary. + ``` + +### Using Functions with Extra Info as Actions + +The function or functor you call using `Invoke()` must have the same number of +arguments as the mock function you use it for. Sometimes you may have a function +that takes more arguments, and you are willing to pass in the extra arguments +yourself to fill the gap. You can do this in gMock using callbacks with +pre-bound arguments. Here's an example: + +```cpp +using ::testing::Invoke; + +class MockFoo : public Foo { + public: + MOCK_METHOD(char, DoThis, (int n), (override)); +}; + +char SignOfSum(int x, int y) { + const int sum = x + y; + return (sum > 0) ? '+' : (sum < 0) ? '-' : '0'; +} + +TEST_F(FooTest, Test) { + MockFoo foo; + + EXPECT_CALL(foo, DoThis(2)) + .WillOnce(Invoke(NewPermanentCallback(SignOfSum, 5))); + EXPECT_EQ('+', foo.DoThis(2)); // Invokes SignOfSum(5, 2). +} +``` + +### Invoking a Function/Method/Functor/Lambda/Callback Without Arguments + +`Invoke()` passes the mock function's arguments to the function, etc being +invoked such that the callee has the full context of the call to work with. If +the invoked function is not interested in some or all of the arguments, it can +simply ignore them. + +Yet, a common pattern is that a test author wants to invoke a function without +the arguments of the mock function. She could do that using a wrapper function +that throws away the arguments before invoking an underlining nullary function. +Needless to say, this can be tedious and obscures the intent of the test. + +There are two solutions to this problem. First, you can pass any callable of +zero args as an action. Alternatively, use `InvokeWithoutArgs()`, which is like +`Invoke()` except that it doesn't pass the mock function's arguments to the +callee. Here's an example of each: + +```cpp +using ::testing::_; +using ::testing::InvokeWithoutArgs; + +class MockFoo : public Foo { + public: + MOCK_METHOD(bool, ComplexJob, (int n), (override)); +}; + +bool Job1() { ... } +bool Job2(int n, char c) { ... } + +... + MockFoo foo; + EXPECT_CALL(foo, ComplexJob(_)) + .WillOnce([] { Job1(); }); + .WillOnce(InvokeWithoutArgs(NewPermanentCallback(Job2, 5, 'a'))); + + foo.ComplexJob(10); // Invokes Job1(). + foo.ComplexJob(20); // Invokes Job2(5, 'a'). +``` + +Note that: + +* The action takes ownership of the callback and will delete it when the + action itself is destructed. +* If the type of a callback is derived from a base callback type `C`, you need + to implicitly cast it to `C` to resolve the overloading, e.g. + + ```cpp + using ::testing::InvokeWithoutArgs; + ... + ResultCallback* is_ok = ...; + ... InvokeWithoutArgs(is_ok) ...; // This works. + + BlockingClosure* done = ...; + ... InvokeWithoutArgs(implicit_cast(done)) ...; + // The cast is necessary. + ``` + +### Invoking an Argument of the Mock Function + +Sometimes a mock function will receive a function pointer, a functor (in other +words, a "callable") as an argument, e.g. + +```cpp +class MockFoo : public Foo { + public: + MOCK_METHOD(bool, DoThis, (int n, (ResultCallback1* callback)), + (override)); +}; +``` + +and you may want to invoke this callable argument: + +```cpp +using ::testing::_; +... + MockFoo foo; + EXPECT_CALL(foo, DoThis(_, _)) + .WillOnce(...); + // Will execute callback->Run(5), where callback is the + // second argument DoThis() receives. +``` + +{: .callout .note} +NOTE: The section below is legacy documentation from before C++ had lambdas: + +Arghh, you need to refer to a mock function argument but C++ has no lambda +(yet), so you have to define your own action. :-( Or do you really? + +Well, gMock has an action to solve *exactly* this problem: + +```cpp +InvokeArgument(arg_1, arg_2, ..., arg_m) +``` + +will invoke the `N`-th (0-based) argument the mock function receives, with +`arg_1`, `arg_2`, ..., and `arg_m`. No matter if the argument is a function +pointer, a functor, or a callback. gMock handles them all. + +With that, you could write: + +```cpp +using ::testing::_; +using ::testing::InvokeArgument; +... + EXPECT_CALL(foo, DoThis(_, _)) + .WillOnce(InvokeArgument<1>(5)); + // Will execute callback->Run(5), where callback is the + // second argument DoThis() receives. +``` + +What if the callable takes an argument by reference? No problem - just wrap it +inside `std::ref()`: + +```cpp + ... + MOCK_METHOD(bool, Bar, + ((ResultCallback2* callback)), + (override)); + ... + using ::testing::_; + using ::testing::InvokeArgument; + ... + MockFoo foo; + Helper helper; + ... + EXPECT_CALL(foo, Bar(_)) + .WillOnce(InvokeArgument<0>(5, std::ref(helper))); + // std::ref(helper) guarantees that a reference to helper, not a copy of + // it, will be passed to the callback. +``` + +What if the callable takes an argument by reference and we do **not** wrap the +argument in `std::ref()`? Then `InvokeArgument()` will *make a copy* of the +argument, and pass a *reference to the copy*, instead of a reference to the +original value, to the callable. This is especially handy when the argument is a +temporary value: + +```cpp + ... + MOCK_METHOD(bool, DoThat, (bool (*f)(const double& x, const string& s)), + (override)); + ... + using ::testing::_; + using ::testing::InvokeArgument; + ... + MockFoo foo; + ... + EXPECT_CALL(foo, DoThat(_)) + .WillOnce(InvokeArgument<0>(5.0, string("Hi"))); + // Will execute (*f)(5.0, string("Hi")), where f is the function pointer + // DoThat() receives. Note that the values 5.0 and string("Hi") are + // temporary and dead once the EXPECT_CALL() statement finishes. Yet + // it's fine to perform this action later, since a copy of the values + // are kept inside the InvokeArgument action. +``` + +### Ignoring an Action's Result + +Sometimes you have an action that returns *something*, but you need an action +that returns `void` (perhaps you want to use it in a mock function that returns +`void`, or perhaps it needs to be used in `DoAll()` and it's not the last in the +list). `IgnoreResult()` lets you do that. For example: + +```cpp +using ::testing::_; +using ::testing::DoAll; +using ::testing::IgnoreResult; +using ::testing::Return; + +int Process(const MyData& data); +string DoSomething(); + +class MockFoo : public Foo { + public: + MOCK_METHOD(void, Abc, (const MyData& data), (override)); + MOCK_METHOD(bool, Xyz, (), (override)); +}; + + ... + MockFoo foo; + EXPECT_CALL(foo, Abc(_)) + // .WillOnce(Invoke(Process)); + // The above line won't compile as Process() returns int but Abc() needs + // to return void. + .WillOnce(IgnoreResult(Process)); + EXPECT_CALL(foo, Xyz()) + .WillOnce(DoAll(IgnoreResult(DoSomething), + // Ignores the string DoSomething() returns. + Return(true))); +``` + +Note that you **cannot** use `IgnoreResult()` on an action that already returns +`void`. Doing so will lead to ugly compiler errors. + +### Selecting an Action's Arguments {#SelectingArgs} + +Say you have a mock function `Foo()` that takes seven arguments, and you have a +custom action that you want to invoke when `Foo()` is called. Trouble is, the +custom action only wants three arguments: + +```cpp +using ::testing::_; +using ::testing::Invoke; +... + MOCK_METHOD(bool, Foo, + (bool visible, const string& name, int x, int y, + (const map>), double& weight, double min_weight, + double max_wight)); +... +bool IsVisibleInQuadrant1(bool visible, int x, int y) { + return visible && x >= 0 && y >= 0; +} +... + EXPECT_CALL(mock, Foo) + .WillOnce(Invoke(IsVisibleInQuadrant1)); // Uh, won't compile. :-( +``` + +To please the compiler God, you need to define an "adaptor" that has the same +signature as `Foo()` and calls the custom action with the right arguments: + +```cpp +using ::testing::_; +using ::testing::Invoke; +... +bool MyIsVisibleInQuadrant1(bool visible, const string& name, int x, int y, + const map, double>& weight, + double min_weight, double max_wight) { + return IsVisibleInQuadrant1(visible, x, y); +} +... + EXPECT_CALL(mock, Foo) + .WillOnce(Invoke(MyIsVisibleInQuadrant1)); // Now it works. +``` + +But isn't this awkward? + +gMock provides a generic *action adaptor*, so you can spend your time minding +more important business than writing your own adaptors. Here's the syntax: + +```cpp +WithArgs(action) +``` + +creates an action that passes the arguments of the mock function at the given +indices (0-based) to the inner `action` and performs it. Using `WithArgs`, our +original example can be written as: + +```cpp +using ::testing::_; +using ::testing::Invoke; +using ::testing::WithArgs; +... + EXPECT_CALL(mock, Foo) + .WillOnce(WithArgs<0, 2, 3>(Invoke(IsVisibleInQuadrant1))); // No need to define your own adaptor. +``` + +For better readability, gMock also gives you: + +* `WithoutArgs(action)` when the inner `action` takes *no* argument, and +* `WithArg(action)` (no `s` after `Arg`) when the inner `action` takes + *one* argument. + +As you may have realized, `InvokeWithoutArgs(...)` is just syntactic sugar for +`WithoutArgs(Invoke(...))`. + +Here are more tips: + +* The inner action used in `WithArgs` and friends does not have to be + `Invoke()` -- it can be anything. +* You can repeat an argument in the argument list if necessary, e.g. + `WithArgs<2, 3, 3, 5>(...)`. +* You can change the order of the arguments, e.g. `WithArgs<3, 2, 1>(...)`. +* The types of the selected arguments do *not* have to match the signature of + the inner action exactly. It works as long as they can be implicitly + converted to the corresponding arguments of the inner action. For example, + if the 4-th argument of the mock function is an `int` and `my_action` takes + a `double`, `WithArg<4>(my_action)` will work. + +### Ignoring Arguments in Action Functions + +The [selecting-an-action's-arguments](#SelectingArgs) recipe showed us one way +to make a mock function and an action with incompatible argument lists fit +together. The downside is that wrapping the action in `WithArgs<...>()` can get +tedious for people writing the tests. + +If you are defining a function (or method, functor, lambda, callback) to be used +with `Invoke*()`, and you are not interested in some of its arguments, an +alternative to `WithArgs` is to declare the uninteresting arguments as `Unused`. +This makes the definition less cluttered and less fragile in case the types of +the uninteresting arguments change. It could also increase the chance the action +function can be reused. For example, given + +```cpp + public: + MOCK_METHOD(double, Foo, double(const string& label, double x, double y), + (override)); + MOCK_METHOD(double, Bar, (int index, double x, double y), (override)); +``` + +instead of + +```cpp +using ::testing::_; +using ::testing::Invoke; + +double DistanceToOriginWithLabel(const string& label, double x, double y) { + return sqrt(x*x + y*y); +} +double DistanceToOriginWithIndex(int index, double x, double y) { + return sqrt(x*x + y*y); +} +... + EXPECT_CALL(mock, Foo("abc", _, _)) + .WillOnce(Invoke(DistanceToOriginWithLabel)); + EXPECT_CALL(mock, Bar(5, _, _)) + .WillOnce(Invoke(DistanceToOriginWithIndex)); +``` + +you could write + +```cpp +using ::testing::_; +using ::testing::Invoke; +using ::testing::Unused; + +double DistanceToOrigin(Unused, double x, double y) { + return sqrt(x*x + y*y); +} +... + EXPECT_CALL(mock, Foo("abc", _, _)) + .WillOnce(Invoke(DistanceToOrigin)); + EXPECT_CALL(mock, Bar(5, _, _)) + .WillOnce(Invoke(DistanceToOrigin)); +``` + +### Sharing Actions + +Just like matchers, a gMock action object consists of a pointer to a ref-counted +implementation object. Therefore copying actions is also allowed and very +efficient. When the last action that references the implementation object dies, +the implementation object will be deleted. + +If you have some complex action that you want to use again and again, you may +not have to build it from scratch everytime. If the action doesn't have an +internal state (i.e. if it always does the same thing no matter how many times +it has been called), you can assign it to an action variable and use that +variable repeatedly. For example: + +```cpp +using ::testing::Action; +using ::testing::DoAll; +using ::testing::Return; +using ::testing::SetArgPointee; +... + Action set_flag = DoAll(SetArgPointee<0>(5), + Return(true)); + ... use set_flag in .WillOnce() and .WillRepeatedly() ... +``` + +However, if the action has its own state, you may be surprised if you share the +action object. Suppose you have an action factory `IncrementCounter(init)` which +creates an action that increments and returns a counter whose initial value is +`init`, using two actions created from the same expression and using a shared +action will exhibit different behaviors. Example: + +```cpp + EXPECT_CALL(foo, DoThis()) + .WillRepeatedly(IncrementCounter(0)); + EXPECT_CALL(foo, DoThat()) + .WillRepeatedly(IncrementCounter(0)); + foo.DoThis(); // Returns 1. + foo.DoThis(); // Returns 2. + foo.DoThat(); // Returns 1 - Blah() uses a different + // counter than Bar()'s. +``` + +versus + +```cpp +using ::testing::Action; +... + Action increment = IncrementCounter(0); + EXPECT_CALL(foo, DoThis()) + .WillRepeatedly(increment); + EXPECT_CALL(foo, DoThat()) + .WillRepeatedly(increment); + foo.DoThis(); // Returns 1. + foo.DoThis(); // Returns 2. + foo.DoThat(); // Returns 3 - the counter is shared. +``` + +### Testing Asynchronous Behavior + +One oft-encountered problem with gMock is that it can be hard to test +asynchronous behavior. Suppose you had a `EventQueue` class that you wanted to +test, and you created a separate `EventDispatcher` interface so that you could +easily mock it out. However, the implementation of the class fired all the +events on a background thread, which made test timings difficult. You could just +insert `sleep()` statements and hope for the best, but that makes your test +behavior nondeterministic. A better way is to use gMock actions and +`Notification` objects to force your asynchronous test to behave synchronously. + +```cpp +class MockEventDispatcher : public EventDispatcher { + MOCK_METHOD(bool, DispatchEvent, (int32), (override)); +}; + +TEST(EventQueueTest, EnqueueEventTest) { + MockEventDispatcher mock_event_dispatcher; + EventQueue event_queue(&mock_event_dispatcher); + + const int32 kEventId = 321; + absl::Notification done; + EXPECT_CALL(mock_event_dispatcher, DispatchEvent(kEventId)) + .WillOnce([&done] { done.Notify(); }); + + event_queue.EnqueueEvent(kEventId); + done.WaitForNotification(); +} +``` + +In the example above, we set our normal gMock expectations, but then add an +additional action to notify the `Notification` object. Now we can just call +`Notification::WaitForNotification()` in the main thread to wait for the +asynchronous call to finish. After that, our test suite is complete and we can +safely exit. + +{: .callout .note} +Note: this example has a downside: namely, if the expectation is not satisfied, +our test will run forever. It will eventually time-out and fail, but it will +take longer and be slightly harder to debug. To alleviate this problem, you can +use `WaitForNotificationWithTimeout(ms)` instead of `WaitForNotification()`. + +## Misc Recipes on Using gMock + +### Mocking Methods That Use Move-Only Types + +C++11 introduced *move-only types*. A move-only-typed value can be moved from +one object to another, but cannot be copied. `std::unique_ptr` is probably +the most commonly used move-only type. + +Mocking a method that takes and/or returns move-only types presents some +challenges, but nothing insurmountable. This recipe shows you how you can do it. +Note that the support for move-only method arguments was only introduced to +gMock in April 2017; in older code, you may find more complex +[workarounds](#LegacyMoveOnly) for lack of this feature. + +Let’s say we are working on a fictional project that lets one post and share +snippets called “buzzes”. Your code uses these types: + +```cpp +enum class AccessLevel { kInternal, kPublic }; + +class Buzz { + public: + explicit Buzz(AccessLevel access) { ... } + ... +}; + +class Buzzer { + public: + virtual ~Buzzer() {} + virtual std::unique_ptr MakeBuzz(StringPiece text) = 0; + virtual bool ShareBuzz(std::unique_ptr buzz, int64_t timestamp) = 0; + ... +}; +``` + +A `Buzz` object represents a snippet being posted. A class that implements the +`Buzzer` interface is capable of creating and sharing `Buzz`es. Methods in +`Buzzer` may return a `unique_ptr` or take a `unique_ptr`. Now we +need to mock `Buzzer` in our tests. + +To mock a method that accepts or returns move-only types, you just use the +familiar `MOCK_METHOD` syntax as usual: + +```cpp +class MockBuzzer : public Buzzer { + public: + MOCK_METHOD(std::unique_ptr, MakeBuzz, (StringPiece text), (override)); + MOCK_METHOD(bool, ShareBuzz, (std::unique_ptr buzz, int64_t timestamp), + (override)); +}; +``` + +Now that we have the mock class defined, we can use it in tests. In the +following code examples, we assume that we have defined a `MockBuzzer` object +named `mock_buzzer_`: + +```cpp + MockBuzzer mock_buzzer_; +``` + +First let’s see how we can set expectations on the `MakeBuzz()` method, which +returns a `unique_ptr`. + +As usual, if you set an expectation without an action (i.e. the `.WillOnce()` or +`.WillRepeatedly()` clause), when that expectation fires, the default action for +that method will be taken. Since `unique_ptr<>` has a default constructor that +returns a null `unique_ptr`, that’s what you’ll get if you don’t specify an +action: + +```cpp + // Use the default action. + EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")); + + // Triggers the previous EXPECT_CALL. + EXPECT_EQ(nullptr, mock_buzzer_.MakeBuzz("hello")); +``` + +If you are not happy with the default action, you can tweak it as usual; see +[Setting Default Actions](#OnCall). + +If you just need to return a pre-defined move-only value, you can use the +`Return(ByMove(...))` action: + +```cpp + // When this fires, the unique_ptr<> specified by ByMove(...) will + // be returned. + EXPECT_CALL(mock_buzzer_, MakeBuzz("world")) + .WillOnce(Return(ByMove(MakeUnique(AccessLevel::kInternal)))); + + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("world")); +``` + +Note that `ByMove()` is essential here - if you drop it, the code won’t compile. + +Quiz time! What do you think will happen if a `Return(ByMove(...))` action is +performed more than once (e.g. you write `... +.WillRepeatedly(Return(ByMove(...)));`)? Come think of it, after the first time +the action runs, the source value will be consumed (since it’s a move-only +value), so the next time around, there’s no value to move from -- you’ll get a +run-time error that `Return(ByMove(...))` can only be run once. + +If you need your mock method to do more than just moving a pre-defined value, +remember that you can always use a lambda or a callable object, which can do +pretty much anything you want: + +```cpp + EXPECT_CALL(mock_buzzer_, MakeBuzz("x")) + .WillRepeatedly([](StringPiece text) { + return MakeUnique(AccessLevel::kInternal); + }); + + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); +``` + +Every time this `EXPECT_CALL` fires, a new `unique_ptr` will be created +and returned. You cannot do this with `Return(ByMove(...))`. + +That covers returning move-only values; but how do we work with methods +accepting move-only arguments? The answer is that they work normally, although +some actions will not compile when any of method's arguments are move-only. You +can always use `Return`, or a [lambda or functor](#FunctionsAsActions): + +```cpp + using ::testing::Unused; + + EXPECT_CALL(mock_buzzer_, ShareBuzz(NotNull(), _)).WillOnce(Return(true)); + EXPECT_TRUE(mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal)), + 0); + + EXPECT_CALL(mock_buzzer_, ShareBuzz(_, _)).WillOnce( + [](std::unique_ptr buzz, Unused) { return buzz != nullptr; }); + EXPECT_FALSE(mock_buzzer_.ShareBuzz(nullptr, 0)); +``` + +Many built-in actions (`WithArgs`, `WithoutArgs`,`DeleteArg`, `SaveArg`, ...) +could in principle support move-only arguments, but the support for this is not +implemented yet. If this is blocking you, please file a bug. + +A few actions (e.g. `DoAll`) copy their arguments internally, so they can never +work with non-copyable objects; you'll have to use functors instead. + +#### Legacy workarounds for move-only types {#LegacyMoveOnly} + +Support for move-only function arguments was only introduced to gMock in April +of 2017. In older code, you may encounter the following workaround for the lack +of this feature (it is no longer necessary - we're including it just for +reference): + +```cpp +class MockBuzzer : public Buzzer { + public: + MOCK_METHOD(bool, DoShareBuzz, (Buzz* buzz, Time timestamp)); + bool ShareBuzz(std::unique_ptr buzz, Time timestamp) override { + return DoShareBuzz(buzz.get(), timestamp); + } +}; +``` + +The trick is to delegate the `ShareBuzz()` method to a mock method (let’s call +it `DoShareBuzz()`) that does not take move-only parameters. Then, instead of +setting expectations on `ShareBuzz()`, you set them on the `DoShareBuzz()` mock +method: + +```cpp + MockBuzzer mock_buzzer_; + EXPECT_CALL(mock_buzzer_, DoShareBuzz(NotNull(), _)); + + // When one calls ShareBuzz() on the MockBuzzer like this, the call is + // forwarded to DoShareBuzz(), which is mocked. Therefore this statement + // will trigger the above EXPECT_CALL. + mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal), 0); +``` + +### Making the Compilation Faster + +Believe it or not, the *vast majority* of the time spent on compiling a mock +class is in generating its constructor and destructor, as they perform +non-trivial tasks (e.g. verification of the expectations). What's more, mock +methods with different signatures have different types and thus their +constructors/destructors need to be generated by the compiler separately. As a +result, if you mock many different types of methods, compiling your mock class +can get really slow. + +If you are experiencing slow compilation, you can move the definition of your +mock class' constructor and destructor out of the class body and into a `.cc` +file. This way, even if you `#include` your mock class in N files, the compiler +only needs to generate its constructor and destructor once, resulting in a much +faster compilation. + +Let's illustrate the idea using an example. Here's the definition of a mock +class before applying this recipe: + +```cpp +// File mock_foo.h. +... +class MockFoo : public Foo { + public: + // Since we don't declare the constructor or the destructor, + // the compiler will generate them in every translation unit + // where this mock class is used. + + MOCK_METHOD(int, DoThis, (), (override)); + MOCK_METHOD(bool, DoThat, (const char* str), (override)); + ... more mock methods ... +}; +``` + +After the change, it would look like: + +```cpp +// File mock_foo.h. +... +class MockFoo : public Foo { + public: + // The constructor and destructor are declared, but not defined, here. + MockFoo(); + virtual ~MockFoo(); + + MOCK_METHOD(int, DoThis, (), (override)); + MOCK_METHOD(bool, DoThat, (const char* str), (override)); + ... more mock methods ... +}; +``` + +and + +```cpp +// File mock_foo.cc. +#include "path/to/mock_foo.h" + +// The definitions may appear trivial, but the functions actually do a +// lot of things through the constructors/destructors of the member +// variables used to implement the mock methods. +MockFoo::MockFoo() {} +MockFoo::~MockFoo() {} +``` + +### Forcing a Verification + +When it's being destroyed, your friendly mock object will automatically verify +that all expectations on it have been satisfied, and will generate googletest +failures if not. This is convenient as it leaves you with one less thing to +worry about. That is, unless you are not sure if your mock object will be +destroyed. + +How could it be that your mock object won't eventually be destroyed? Well, it +might be created on the heap and owned by the code you are testing. Suppose +there's a bug in that code and it doesn't delete the mock object properly - you +could end up with a passing test when there's actually a bug. + +Using a heap checker is a good idea and can alleviate the concern, but its +implementation is not 100% reliable. So, sometimes you do want to *force* gMock +to verify a mock object before it is (hopefully) destructed. You can do this +with `Mock::VerifyAndClearExpectations(&mock_object)`: + +```cpp +TEST(MyServerTest, ProcessesRequest) { + using ::testing::Mock; + + MockFoo* const foo = new MockFoo; + EXPECT_CALL(*foo, ...)...; + // ... other expectations ... + + // server now owns foo. + MyServer server(foo); + server.ProcessRequest(...); + + // In case that server's destructor will forget to delete foo, + // this will verify the expectations anyway. + Mock::VerifyAndClearExpectations(foo); +} // server is destroyed when it goes out of scope here. +``` + +{: .callout .tip} +**Tip:** The `Mock::VerifyAndClearExpectations()` function returns a `bool` to +indicate whether the verification was successful (`true` for yes), so you can +wrap that function call inside a `ASSERT_TRUE()` if there is no point going +further when the verification has failed. + +Do not set new expectations after verifying and clearing a mock after its use. +Setting expectations after code that exercises the mock has undefined behavior. +See [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more +information. + +### Using Checkpoints {#UsingCheckPoints} + +Sometimes you might want to test a mock object's behavior in phases whose sizes +are each manageable, or you might want to set more detailed expectations about +which API calls invoke which mock functions. + +A technique you can use is to put the expectations in a sequence and insert +calls to a dummy "checkpoint" function at specific places. Then you can verify +that the mock function calls do happen at the right time. For example, if you +are exercising the code: + +```cpp + Foo(1); + Foo(2); + Foo(3); +``` + +and want to verify that `Foo(1)` and `Foo(3)` both invoke `mock.Bar("a")`, but +`Foo(2)` doesn't invoke anything, you can write: + +```cpp +using ::testing::MockFunction; + +TEST(FooTest, InvokesBarCorrectly) { + MyMock mock; + // Class MockFunction has exactly one mock method. It is named + // Call() and has type F. + MockFunction check; + { + InSequence s; + + EXPECT_CALL(mock, Bar("a")); + EXPECT_CALL(check, Call("1")); + EXPECT_CALL(check, Call("2")); + EXPECT_CALL(mock, Bar("a")); + } + Foo(1); + check.Call("1"); + Foo(2); + check.Call("2"); + Foo(3); +} +``` + +The expectation spec says that the first `Bar("a")` call must happen before +checkpoint "1", the second `Bar("a")` call must happen after checkpoint "2", and +nothing should happen between the two checkpoints. The explicit checkpoints make +it clear which `Bar("a")` is called by which call to `Foo()`. + +### Mocking Destructors + +Sometimes you want to make sure a mock object is destructed at the right time, +e.g. after `bar->A()` is called but before `bar->B()` is called. We already know +that you can specify constraints on the [order](#OrderedCalls) of mock function +calls, so all we need to do is to mock the destructor of the mock function. + +This sounds simple, except for one problem: a destructor is a special function +with special syntax and special semantics, and the `MOCK_METHOD` macro doesn't +work for it: + +```cpp +MOCK_METHOD(void, ~MockFoo, ()); // Won't compile! +``` + +The good news is that you can use a simple pattern to achieve the same effect. +First, add a mock function `Die()` to your mock class and call it in the +destructor, like this: + +```cpp +class MockFoo : public Foo { + ... + // Add the following two lines to the mock class. + MOCK_METHOD(void, Die, ()); + ~MockFoo() override { Die(); } +}; +``` + +(If the name `Die()` clashes with an existing symbol, choose another name.) Now, +we have translated the problem of testing when a `MockFoo` object dies to +testing when its `Die()` method is called: + +```cpp + MockFoo* foo = new MockFoo; + MockBar* bar = new MockBar; + ... + { + InSequence s; + + // Expects *foo to die after bar->A() and before bar->B(). + EXPECT_CALL(*bar, A()); + EXPECT_CALL(*foo, Die()); + EXPECT_CALL(*bar, B()); + } +``` + +And that's that. + +### Using gMock and Threads {#UsingThreads} + +In a **unit** test, it's best if you could isolate and test a piece of code in a +single-threaded context. That avoids race conditions and dead locks, and makes +debugging your test much easier. + +Yet most programs are multi-threaded, and sometimes to test something we need to +pound on it from more than one thread. gMock works for this purpose too. + +Remember the steps for using a mock: + +1. Create a mock object `foo`. +2. Set its default actions and expectations using `ON_CALL()` and + `EXPECT_CALL()`. +3. The code under test calls methods of `foo`. +4. Optionally, verify and reset the mock. +5. Destroy the mock yourself, or let the code under test destroy it. The + destructor will automatically verify it. + +If you follow the following simple rules, your mocks and threads can live +happily together: + +* Execute your *test code* (as opposed to the code being tested) in *one* + thread. This makes your test easy to follow. +* Obviously, you can do step #1 without locking. +* When doing step #2 and #5, make sure no other thread is accessing `foo`. + Obvious too, huh? +* #3 and #4 can be done either in one thread or in multiple threads - anyway + you want. gMock takes care of the locking, so you don't have to do any - + unless required by your test logic. + +If you violate the rules (for example, if you set expectations on a mock while +another thread is calling its methods), you get undefined behavior. That's not +fun, so don't do it. + +gMock guarantees that the action for a mock function is done in the same thread +that called the mock function. For example, in + +```cpp + EXPECT_CALL(mock, Foo(1)) + .WillOnce(action1); + EXPECT_CALL(mock, Foo(2)) + .WillOnce(action2); +``` + +if `Foo(1)` is called in thread 1 and `Foo(2)` is called in thread 2, gMock will +execute `action1` in thread 1 and `action2` in thread 2. + +gMock does *not* impose a sequence on actions performed in different threads +(doing so may create deadlocks as the actions may need to cooperate). This means +that the execution of `action1` and `action2` in the above example *may* +interleave. If this is a problem, you should add proper synchronization logic to +`action1` and `action2` to make the test thread-safe. + +Also, remember that `DefaultValue` is a global resource that potentially +affects *all* living mock objects in your program. Naturally, you won't want to +mess with it from multiple threads or when there still are mocks in action. + +### Controlling How Much Information gMock Prints + +When gMock sees something that has the potential of being an error (e.g. a mock +function with no expectation is called, a.k.a. an uninteresting call, which is +allowed but perhaps you forgot to explicitly ban the call), it prints some +warning messages, including the arguments of the function, the return value, and +the stack trace. Hopefully this will remind you to take a look and see if there +is indeed a problem. + +Sometimes you are confident that your tests are correct and may not appreciate +such friendly messages. Some other times, you are debugging your tests or +learning about the behavior of the code you are testing, and wish you could +observe every mock call that happens (including argument values, the return +value, and the stack trace). Clearly, one size doesn't fit all. + +You can control how much gMock tells you using the `--gmock_verbose=LEVEL` +command-line flag, where `LEVEL` is a string with three possible values: + +* `info`: gMock will print all informational messages, warnings, and errors + (most verbose). At this setting, gMock will also log any calls to the + `ON_CALL/EXPECT_CALL` macros. It will include a stack trace in + "uninteresting call" warnings. +* `warning`: gMock will print both warnings and errors (less verbose); it will + omit the stack traces in "uninteresting call" warnings. This is the default. +* `error`: gMock will print errors only (least verbose). + +Alternatively, you can adjust the value of that flag from within your tests like +so: + +```cpp + ::testing::FLAGS_gmock_verbose = "error"; +``` + +If you find gMock printing too many stack frames with its informational or +warning messages, remember that you can control their amount with the +`--gtest_stack_trace_depth=max_depth` flag. + +Now, judiciously use the right flag to enable gMock serve you better! + +### Gaining Super Vision into Mock Calls + +You have a test using gMock. It fails: gMock tells you some expectations aren't +satisfied. However, you aren't sure why: Is there a typo somewhere in the +matchers? Did you mess up the order of the `EXPECT_CALL`s? Or is the code under +test doing something wrong? How can you find out the cause? + +Won't it be nice if you have X-ray vision and can actually see the trace of all +`EXPECT_CALL`s and mock method calls as they are made? For each call, would you +like to see its actual argument values and which `EXPECT_CALL` gMock thinks it +matches? If you still need some help to figure out who made these calls, how +about being able to see the complete stack trace at each mock call? + +You can unlock this power by running your test with the `--gmock_verbose=info` +flag. For example, given the test program: + +```cpp +#include "gmock/gmock.h" + +using testing::_; +using testing::HasSubstr; +using testing::Return; + +class MockFoo { + public: + MOCK_METHOD(void, F, (const string& x, const string& y)); +}; + +TEST(Foo, Bar) { + MockFoo mock; + EXPECT_CALL(mock, F(_, _)).WillRepeatedly(Return()); + EXPECT_CALL(mock, F("a", "b")); + EXPECT_CALL(mock, F("c", HasSubstr("d"))); + + mock.F("a", "good"); + mock.F("a", "b"); +} +``` + +if you run it with `--gmock_verbose=info`, you will see this output: + +```shell +[ RUN ] Foo.Bar + +foo_test.cc:14: EXPECT_CALL(mock, F(_, _)) invoked +Stack trace: ... + +foo_test.cc:15: EXPECT_CALL(mock, F("a", "b")) invoked +Stack trace: ... + +foo_test.cc:16: EXPECT_CALL(mock, F("c", HasSubstr("d"))) invoked +Stack trace: ... + +foo_test.cc:14: Mock function call matches EXPECT_CALL(mock, F(_, _))... + Function call: F(@0x7fff7c8dad40"a",@0x7fff7c8dad10"good") +Stack trace: ... + +foo_test.cc:15: Mock function call matches EXPECT_CALL(mock, F("a", "b"))... + Function call: F(@0x7fff7c8dada0"a",@0x7fff7c8dad70"b") +Stack trace: ... + +foo_test.cc:16: Failure +Actual function call count doesn't match EXPECT_CALL(mock, F("c", HasSubstr("d")))... + Expected: to be called once + Actual: never called - unsatisfied and active +[ FAILED ] Foo.Bar +``` + +Suppose the bug is that the `"c"` in the third `EXPECT_CALL` is a typo and +should actually be `"a"`. With the above message, you should see that the actual +`F("a", "good")` call is matched by the first `EXPECT_CALL`, not the third as +you thought. From that it should be obvious that the third `EXPECT_CALL` is +written wrong. Case solved. + +If you are interested in the mock call trace but not the stack traces, you can +combine `--gmock_verbose=info` with `--gtest_stack_trace_depth=0` on the test +command line. + +### Running Tests in Emacs + +If you build and run your tests in Emacs using the `M-x google-compile` command +(as many googletest users do), the source file locations of gMock and googletest +errors will be highlighted. Just press `` on one of them and you'll be +taken to the offending line. Or, you can just type `C-x`` to jump to the next +error. + +To make it even easier, you can add the following lines to your `~/.emacs` file: + +```text +(global-set-key "\M-m" 'google-compile) ; m is for make +(global-set-key [M-down] 'next-error) +(global-set-key [M-up] '(lambda () (interactive) (next-error -1))) +``` + +Then you can type `M-m` to start a build (if you want to run the test as well, +just make sure `foo_test.run` or `runtests` is in the build command you supply +after typing `M-m`), or `M-up`/`M-down` to move back and forth between errors. + +## Extending gMock + +### Writing New Matchers Quickly {#NewMatchers} + +{: .callout .warning} +WARNING: gMock does not guarantee when or how many times a matcher will be +invoked. Therefore, all matchers must be functionally pure. See +[this section](#PureMatchers) for more details. + +The `MATCHER*` family of macros can be used to define custom matchers easily. +The syntax: + +```cpp +MATCHER(name, description_string_expression) { statements; } +``` + +will define a matcher with the given name that executes the statements, which +must return a `bool` to indicate if the match succeeds. Inside the statements, +you can refer to the value being matched by `arg`, and refer to its type by +`arg_type`. + +The *description string* is a `string`-typed expression that documents what the +matcher does, and is used to generate the failure message when the match fails. +It can (and should) reference the special `bool` variable `negation`, and should +evaluate to the description of the matcher when `negation` is `false`, or that +of the matcher's negation when `negation` is `true`. + +For convenience, we allow the description string to be empty (`""`), in which +case gMock will use the sequence of words in the matcher name as the +description. + +For example: + +```cpp +MATCHER(IsDivisibleBy7, "") { return (arg % 7) == 0; } +``` + +allows you to write + +```cpp + // Expects mock_foo.Bar(n) to be called where n is divisible by 7. + EXPECT_CALL(mock_foo, Bar(IsDivisibleBy7())); +``` + +or, + +```cpp + using ::testing::Not; + ... + // Verifies that a value is divisible by 7 and the other is not. + EXPECT_THAT(some_expression, IsDivisibleBy7()); + EXPECT_THAT(some_other_expression, Not(IsDivisibleBy7())); +``` + +If the above assertions fail, they will print something like: + +```shell + Value of: some_expression + Expected: is divisible by 7 + Actual: 27 + ... + Value of: some_other_expression + Expected: not (is divisible by 7) + Actual: 21 +``` + +where the descriptions `"is divisible by 7"` and `"not (is divisible by 7)"` are +automatically calculated from the matcher name `IsDivisibleBy7`. + +As you may have noticed, the auto-generated descriptions (especially those for +the negation) may not be so great. You can always override them with a `string` +expression of your own: + +```cpp +MATCHER(IsDivisibleBy7, + absl::StrCat(negation ? "isn't" : "is", " divisible by 7")) { + return (arg % 7) == 0; +} +``` + +Optionally, you can stream additional information to a hidden argument named +`result_listener` to explain the match result. For example, a better definition +of `IsDivisibleBy7` is: + +```cpp +MATCHER(IsDivisibleBy7, "") { + if ((arg % 7) == 0) + return true; + + *result_listener << "the remainder is " << (arg % 7); + return false; +} +``` + +With this definition, the above assertion will give a better message: + +```shell + Value of: some_expression + Expected: is divisible by 7 + Actual: 27 (the remainder is 6) +``` + +You should let `MatchAndExplain()` print *any additional information* that can +help a user understand the match result. Note that it should explain why the +match succeeds in case of a success (unless it's obvious) - this is useful when +the matcher is used inside `Not()`. There is no need to print the argument value +itself, as gMock already prints it for you. + +{: .callout .note} +NOTE: The type of the value being matched (`arg_type`) is determined by the +context in which you use the matcher and is supplied to you by the compiler, so +you don't need to worry about declaring it (nor can you). This allows the +matcher to be polymorphic. For example, `IsDivisibleBy7()` can be used to match +any type where the value of `(arg % 7) == 0` can be implicitly converted to a +`bool`. In the `Bar(IsDivisibleBy7())` example above, if method `Bar()` takes an +`int`, `arg_type` will be `int`; if it takes an `unsigned long`, `arg_type` will +be `unsigned long`; and so on. + +### Writing New Parameterized Matchers Quickly + +Sometimes you'll want to define a matcher that has parameters. For that you can +use the macro: + +```cpp +MATCHER_P(name, param_name, description_string) { statements; } +``` + +where the description string can be either `""` or a `string` expression that +references `negation` and `param_name`. + +For example: + +```cpp +MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } +``` + +will allow you to write: + +```cpp + EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); +``` + +which may lead to this message (assuming `n` is 10): + +```shell + Value of: Blah("a") + Expected: has absolute value 10 + Actual: -9 +``` + +Note that both the matcher description and its parameter are printed, making the +message human-friendly. + +In the matcher definition body, you can write `foo_type` to reference the type +of a parameter named `foo`. For example, in the body of +`MATCHER_P(HasAbsoluteValue, value)` above, you can write `value_type` to refer +to the type of `value`. + +gMock also provides `MATCHER_P2`, `MATCHER_P3`, ..., up to `MATCHER_P10` to +support multi-parameter matchers: + +```cpp +MATCHER_Pk(name, param_1, ..., param_k, description_string) { statements; } +``` + +Please note that the custom description string is for a particular *instance* of +the matcher, where the parameters have been bound to actual values. Therefore +usually you'll want the parameter values to be part of the description. gMock +lets you do that by referencing the matcher parameters in the description string +expression. + +For example, + +```cpp +using ::testing::PrintToString; +MATCHER_P2(InClosedRange, low, hi, + absl::StrFormat("%s in range [%s, %s]", negation ? "isn't" : "is", + PrintToString(low), PrintToString(hi))) { + return low <= arg && arg <= hi; +} +... +EXPECT_THAT(3, InClosedRange(4, 6)); +``` + +would generate a failure that contains the message: + +```shell + Expected: is in range [4, 6] +``` + +If you specify `""` as the description, the failure message will contain the +sequence of words in the matcher name followed by the parameter values printed +as a tuple. For example, + +```cpp + MATCHER_P2(InClosedRange, low, hi, "") { ... } + ... + EXPECT_THAT(3, InClosedRange(4, 6)); +``` + +would generate a failure that contains the text: + +```shell + Expected: in closed range (4, 6) +``` + +For the purpose of typing, you can view + +```cpp +MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } +``` + +as shorthand for + +```cpp +template +FooMatcherPk +Foo(p1_type p1, ..., pk_type pk) { ... } +``` + +When you write `Foo(v1, ..., vk)`, the compiler infers the types of the +parameters `v1`, ..., and `vk` for you. If you are not happy with the result of +the type inference, you can specify the types by explicitly instantiating the +template, as in `Foo(5, false)`. As said earlier, you don't get to +(or need to) specify `arg_type` as that's determined by the context in which the +matcher is used. + +You can assign the result of expression `Foo(p1, ..., pk)` to a variable of type +`FooMatcherPk`. This can be useful when composing +matchers. Matchers that don't have a parameter or have only one parameter have +special types: you can assign `Foo()` to a `FooMatcher`-typed variable, and +assign `Foo(p)` to a `FooMatcherP`-typed variable. + +While you can instantiate a matcher template with reference types, passing the +parameters by pointer usually makes your code more readable. If, however, you +still want to pass a parameter by reference, be aware that in the failure +message generated by the matcher you will see the value of the referenced object +but not its address. + +You can overload matchers with different numbers of parameters: + +```cpp +MATCHER_P(Blah, a, description_string_1) { ... } +MATCHER_P2(Blah, a, b, description_string_2) { ... } +``` + +While it's tempting to always use the `MATCHER*` macros when defining a new +matcher, you should also consider implementing the matcher interface directly +instead (see the recipes that follow), especially if you need to use the matcher +a lot. While these approaches require more work, they give you more control on +the types of the value being matched and the matcher parameters, which in +general leads to better compiler error messages that pay off in the long run. +They also allow overloading matchers based on parameter types (as opposed to +just based on the number of parameters). + +### Writing New Monomorphic Matchers + +A matcher of argument type `T` implements the matcher interface for `T` and does +two things: it tests whether a value of type `T` matches the matcher, and can +describe what kind of values it matches. The latter ability is used for +generating readable error messages when expectations are violated. + +A matcher of `T` must declare a typedef like: + +```cpp +using is_gtest_matcher = void; +``` + +and supports the following operations: + +```cpp +// Match a value and optionally explain into an ostream. +bool matched = matcher.MatchAndExplain(value, maybe_os); +// where `value` is of type `T` and +// `maybe_os` is of type `std::ostream*`, where it can be null if the caller +// is not interested in there textual explanation. + +matcher.DescribeTo(os); +matcher.DescribeNegationTo(os); +// where `os` is of type `std::ostream*`. +``` + +If you need a custom matcher but `Truly()` is not a good option (for example, +you may not be happy with the way `Truly(predicate)` describes itself, or you +may want your matcher to be polymorphic as `Eq(value)` is), you can define a +matcher to do whatever you want in two steps: first implement the matcher +interface, and then define a factory function to create a matcher instance. The +second step is not strictly needed but it makes the syntax of using the matcher +nicer. + +For example, you can define a matcher to test whether an `int` is divisible by 7 +and then use it like this: + +```cpp +using ::testing::Matcher; + +class DivisibleBy7Matcher { + public: + using is_gtest_matcher = void; + + bool MatchAndExplain(int n, std::ostream*) const { + return (n % 7) == 0; + } + + void DescribeTo(std::ostream* os) const { + *os << "is divisible by 7"; + } + + void DescribeNegationTo(std::ostream* os) const { + *os << "is not divisible by 7"; + } +}; + +Matcher DivisibleBy7() { + return DivisibleBy7Matcher(); +} + +... + EXPECT_CALL(foo, Bar(DivisibleBy7())); +``` + +You may improve the matcher message by streaming additional information to the +`os` argument in `MatchAndExplain()`: + +```cpp +class DivisibleBy7Matcher { + public: + bool MatchAndExplain(int n, std::ostream* os) const { + const int remainder = n % 7; + if (remainder != 0 && os != nullptr) { + *os << "the remainder is " << remainder; + } + return remainder == 0; + } + ... +}; +``` + +Then, `EXPECT_THAT(x, DivisibleBy7());` may generate a message like this: + +```shell +Value of: x +Expected: is divisible by 7 + Actual: 23 (the remainder is 2) +``` + +{: .callout .tip} +Tip: for convenience, `MatchAndExplain()` can take a `MatchResultListener*` +instead of `std::ostream*`. + +### Writing New Polymorphic Matchers + +Expanding what we learned above to *polymorphic* matchers is now just as simple +as adding templates in the right place. + +```cpp + +class NotNullMatcher { + public: + using is_gtest_matcher = void; + + // To implement a polymorphic matcher, we just need to make MatchAndExplain a + // template on its first argument. + + // In this example, we want to use NotNull() with any pointer, so + // MatchAndExplain() accepts a pointer of any type as its first argument. + // In general, you can define MatchAndExplain() as an ordinary method or + // a method template, or even overload it. + template + bool MatchAndExplain(T* p, std::ostream*) const { + return p != nullptr; + } + + // Describes the property of a value matching this matcher. + void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } + + // Describes the property of a value NOT matching this matcher. + void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } +}; + +NotNullMatcher NotNull() { + return NotNullMatcher(); +} + +... + + EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. +``` + +### Legacy Matcher Implementation + +Defining matchers used to be somewhat more complicated, in which it required +several supporting classes and virtual functions. To implement a matcher for +type `T` using the legacy API you have to derive from `MatcherInterface` and +call `MakeMatcher` to construct the object. + +The interface looks like this: + +```cpp +class MatchResultListener { + public: + ... + // Streams x to the underlying ostream; does nothing if the ostream + // is NULL. + template + MatchResultListener& operator<<(const T& x); + + // Returns the underlying ostream. + std::ostream* stream(); +}; + +template +class MatcherInterface { + public: + virtual ~MatcherInterface(); + + // Returns true if and only if the matcher matches x; also explains the match + // result to 'listener'. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; + + // Describes this matcher to an ostream. + virtual void DescribeTo(std::ostream* os) const = 0; + + // Describes the negation of this matcher to an ostream. + virtual void DescribeNegationTo(std::ostream* os) const; +}; +``` + +Fortunately, most of the time you can define a polymorphic matcher easily with +the help of `MakePolymorphicMatcher()`. Here's how you can define `NotNull()` as +an example: + +```cpp +using ::testing::MakePolymorphicMatcher; +using ::testing::MatchResultListener; +using ::testing::PolymorphicMatcher; + +class NotNullMatcher { + public: + // To implement a polymorphic matcher, first define a COPYABLE class + // that has three members MatchAndExplain(), DescribeTo(), and + // DescribeNegationTo(), like the following. + + // In this example, we want to use NotNull() with any pointer, so + // MatchAndExplain() accepts a pointer of any type as its first argument. + // In general, you can define MatchAndExplain() as an ordinary method or + // a method template, or even overload it. + template + bool MatchAndExplain(T* p, + MatchResultListener* /* listener */) const { + return p != NULL; + } + + // Describes the property of a value matching this matcher. + void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } + + // Describes the property of a value NOT matching this matcher. + void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } +}; + +// To construct a polymorphic matcher, pass an instance of the class +// to MakePolymorphicMatcher(). Note the return type. +PolymorphicMatcher NotNull() { + return MakePolymorphicMatcher(NotNullMatcher()); +} + +... + + EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. +``` + +{: .callout .note} +**Note:** Your polymorphic matcher class does **not** need to inherit from +`MatcherInterface` or any other class, and its methods do **not** need to be +virtual. + +Like in a monomorphic matcher, you may explain the match result by streaming +additional information to the `listener` argument in `MatchAndExplain()`. + +### Writing New Cardinalities + +A cardinality is used in `Times()` to tell gMock how many times you expect a +call to occur. It doesn't have to be exact. For example, you can say +`AtLeast(5)` or `Between(2, 4)`. + +If the [built-in set](gmock_cheat_sheet.md#CardinalityList) of cardinalities +doesn't suit you, you are free to define your own by implementing the following +interface (in namespace `testing`): + +```cpp +class CardinalityInterface { + public: + virtual ~CardinalityInterface(); + + // Returns true if and only if call_count calls will satisfy this cardinality. + virtual bool IsSatisfiedByCallCount(int call_count) const = 0; + + // Returns true if and only if call_count calls will saturate this + // cardinality. + virtual bool IsSaturatedByCallCount(int call_count) const = 0; + + // Describes self to an ostream. + virtual void DescribeTo(std::ostream* os) const = 0; +}; +``` + +For example, to specify that a call must occur even number of times, you can +write + +```cpp +using ::testing::Cardinality; +using ::testing::CardinalityInterface; +using ::testing::MakeCardinality; + +class EvenNumberCardinality : public CardinalityInterface { + public: + bool IsSatisfiedByCallCount(int call_count) const override { + return (call_count % 2) == 0; + } + + bool IsSaturatedByCallCount(int call_count) const override { + return false; + } + + void DescribeTo(std::ostream* os) const { + *os << "called even number of times"; + } +}; + +Cardinality EvenNumber() { + return MakeCardinality(new EvenNumberCardinality); +} + +... + EXPECT_CALL(foo, Bar(3)) + .Times(EvenNumber()); +``` + +### Writing New Actions Quickly {#QuickNewActions} + +If the built-in actions don't work for you, you can easily define your own one. +Just define a functor class with a (possibly templated) call operator, matching +the signature of your action. + +```cpp +struct Increment { + template + T operator()(T* arg) { + return ++(*arg); + } +} +``` + +The same approach works with stateful functors (or any callable, really): + +``` +struct MultiplyBy { + template + T operator()(T arg) { return arg * multiplier; } + + int multiplier; +} + +// Then use: +// EXPECT_CALL(...).WillOnce(MultiplyBy{7}); +``` + +#### Legacy macro-based Actions + +Before C++11, the functor-based actions were not supported; the old way of +writing actions was through a set of `ACTION*` macros. We suggest to avoid them +in new code; they hide a lot of logic behind the macro, potentially leading to +harder-to-understand compiler errors. Nevertheless, we cover them here for +completeness. + +By writing + +```cpp +ACTION(name) { statements; } +``` + +in a namespace scope (i.e. not inside a class or function), you will define an +action with the given name that executes the statements. The value returned by +`statements` will be used as the return value of the action. Inside the +statements, you can refer to the K-th (0-based) argument of the mock function as +`argK`. For example: + +```cpp +ACTION(IncrementArg1) { return ++(*arg1); } +``` + +allows you to write + +```cpp +... WillOnce(IncrementArg1()); +``` + +Note that you don't need to specify the types of the mock function arguments. +Rest assured that your code is type-safe though: you'll get a compiler error if +`*arg1` doesn't support the `++` operator, or if the type of `++(*arg1)` isn't +compatible with the mock function's return type. + +Another example: + +```cpp +ACTION(Foo) { + (*arg2)(5); + Blah(); + *arg1 = 0; + return arg0; +} +``` + +defines an action `Foo()` that invokes argument #2 (a function pointer) with 5, +calls function `Blah()`, sets the value pointed to by argument #1 to 0, and +returns argument #0. + +For more convenience and flexibility, you can also use the following pre-defined +symbols in the body of `ACTION`: + +`argK_type` | The type of the K-th (0-based) argument of the mock function +:-------------- | :----------------------------------------------------------- +`args` | All arguments of the mock function as a tuple +`args_type` | The type of all arguments of the mock function as a tuple +`return_type` | The return type of the mock function +`function_type` | The type of the mock function + +For example, when using an `ACTION` as a stub action for mock function: + +```cpp +int DoSomething(bool flag, int* ptr); +``` + +we have: + +Pre-defined Symbol | Is Bound To +------------------ | --------------------------------- +`arg0` | the value of `flag` +`arg0_type` | the type `bool` +`arg1` | the value of `ptr` +`arg1_type` | the type `int*` +`args` | the tuple `(flag, ptr)` +`args_type` | the type `std::tuple` +`return_type` | the type `int` +`function_type` | the type `int(bool, int*)` + +#### Legacy macro-based parameterized Actions + +Sometimes you'll want to parameterize an action you define. For that we have +another macro + +```cpp +ACTION_P(name, param) { statements; } +``` + +For example, + +```cpp +ACTION_P(Add, n) { return arg0 + n; } +``` + +will allow you to write + +```cpp +// Returns argument #0 + 5. +... WillOnce(Add(5)); +``` + +For convenience, we use the term *arguments* for the values used to invoke the +mock function, and the term *parameters* for the values used to instantiate an +action. + +Note that you don't need to provide the type of the parameter either. Suppose +the parameter is named `param`, you can also use the gMock-defined symbol +`param_type` to refer to the type of the parameter as inferred by the compiler. +For example, in the body of `ACTION_P(Add, n)` above, you can write `n_type` for +the type of `n`. + +gMock also provides `ACTION_P2`, `ACTION_P3`, and etc to support multi-parameter +actions. For example, + +```cpp +ACTION_P2(ReturnDistanceTo, x, y) { + double dx = arg0 - x; + double dy = arg1 - y; + return sqrt(dx*dx + dy*dy); +} +``` + +lets you write + +```cpp +... WillOnce(ReturnDistanceTo(5.0, 26.5)); +``` + +You can view `ACTION` as a degenerated parameterized action where the number of +parameters is 0. + +You can also easily define actions overloaded on the number of parameters: + +```cpp +ACTION_P(Plus, a) { ... } +ACTION_P2(Plus, a, b) { ... } +``` + +### Restricting the Type of an Argument or Parameter in an ACTION + +For maximum brevity and reusability, the `ACTION*` macros don't ask you to +provide the types of the mock function arguments and the action parameters. +Instead, we let the compiler infer the types for us. + +Sometimes, however, we may want to be more explicit about the types. There are +several tricks to do that. For example: + +```cpp +ACTION(Foo) { + // Makes sure arg0 can be converted to int. + int n = arg0; + ... use n instead of arg0 here ... +} + +ACTION_P(Bar, param) { + // Makes sure the type of arg1 is const char*. + ::testing::StaticAssertTypeEq(); + + // Makes sure param can be converted to bool. + bool flag = param; +} +``` + +where `StaticAssertTypeEq` is a compile-time assertion in googletest that +verifies two types are the same. + +### Writing New Action Templates Quickly + +Sometimes you want to give an action explicit template parameters that cannot be +inferred from its value parameters. `ACTION_TEMPLATE()` supports that and can be +viewed as an extension to `ACTION()` and `ACTION_P*()`. + +The syntax: + +```cpp +ACTION_TEMPLATE(ActionName, + HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), + AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } +``` + +defines an action template that takes *m* explicit template parameters and *n* +value parameters, where *m* is in [1, 10] and *n* is in [0, 10]. `name_i` is the +name of the *i*-th template parameter, and `kind_i` specifies whether it's a +`typename`, an integral constant, or a template. `p_i` is the name of the *i*-th +value parameter. + +Example: + +```cpp +// DuplicateArg(output) converts the k-th argument of the mock +// function to type T and copies it to *output. +ACTION_TEMPLATE(DuplicateArg, + // Note the comma between int and k: + HAS_2_TEMPLATE_PARAMS(int, k, typename, T), + AND_1_VALUE_PARAMS(output)) { + *output = T(std::get(args)); +} +``` + +To create an instance of an action template, write: + +```cpp +ActionName(v1, ..., v_n) +``` + +where the `t`s are the template arguments and the `v`s are the value arguments. +The value argument types are inferred by the compiler. For example: + +```cpp +using ::testing::_; +... + int n; + EXPECT_CALL(mock, Foo).WillOnce(DuplicateArg<1, unsigned char>(&n)); +``` + +If you want to explicitly specify the value argument types, you can provide +additional template arguments: + +```cpp +ActionName(v1, ..., v_n) +``` + +where `u_i` is the desired type of `v_i`. + +`ACTION_TEMPLATE` and `ACTION`/`ACTION_P*` can be overloaded on the number of +value parameters, but not on the number of template parameters. Without the +restriction, the meaning of the following is unclear: + +```cpp + OverloadedAction(x); +``` + +Are we using a single-template-parameter action where `bool` refers to the type +of `x`, or a two-template-parameter action where the compiler is asked to infer +the type of `x`? + +### Using the ACTION Object's Type + +If you are writing a function that returns an `ACTION` object, you'll need to +know its type. The type depends on the macro used to define the action and the +parameter types. The rule is relatively simple: + + +| Given Definition | Expression | Has Type | +| ----------------------------- | ------------------- | --------------------- | +| `ACTION(Foo)` | `Foo()` | `FooAction` | +| `ACTION_TEMPLATE(Foo, HAS_m_TEMPLATE_PARAMS(...), AND_0_VALUE_PARAMS())` | `Foo()` | `FooAction` | +| `ACTION_P(Bar, param)` | `Bar(int_value)` | `BarActionP` | +| `ACTION_TEMPLATE(Bar, HAS_m_TEMPLATE_PARAMS(...), AND_1_VALUE_PARAMS(p1))` | `Bar(int_value)` | `BarActionP` | +| `ACTION_P2(Baz, p1, p2)` | `Baz(bool_value, int_value)` | `BazActionP2` | +| `ACTION_TEMPLATE(Baz, HAS_m_TEMPLATE_PARAMS(...), AND_2_VALUE_PARAMS(p1, p2))` | `Baz(bool_value, int_value)` | `BazActionP2` | +| ... | ... | ... | + + +Note that we have to pick different suffixes (`Action`, `ActionP`, `ActionP2`, +and etc) for actions with different numbers of value parameters, or the action +definitions cannot be overloaded on the number of them. + +### Writing New Monomorphic Actions {#NewMonoActions} + +While the `ACTION*` macros are very convenient, sometimes they are +inappropriate. For example, despite the tricks shown in the previous recipes, +they don't let you directly specify the types of the mock function arguments and +the action parameters, which in general leads to unoptimized compiler error +messages that can baffle unfamiliar users. They also don't allow overloading +actions based on parameter types without jumping through some hoops. + +An alternative to the `ACTION*` macros is to implement +`::testing::ActionInterface`, where `F` is the type of the mock function in +which the action will be used. For example: + +```cpp +template +class ActionInterface { + public: + virtual ~ActionInterface(); + + // Performs the action. Result is the return type of function type + // F, and ArgumentTuple is the tuple of arguments of F. + // + + // For example, if F is int(bool, const string&), then Result would + // be int, and ArgumentTuple would be std::tuple. + virtual Result Perform(const ArgumentTuple& args) = 0; +}; +``` + +```cpp +using ::testing::_; +using ::testing::Action; +using ::testing::ActionInterface; +using ::testing::MakeAction; + +typedef int IncrementMethod(int*); + +class IncrementArgumentAction : public ActionInterface { + public: + int Perform(const std::tuple& args) override { + int* p = std::get<0>(args); // Grabs the first argument. + return *p++; + } +}; + +Action IncrementArgument() { + return MakeAction(new IncrementArgumentAction); +} + +... + EXPECT_CALL(foo, Baz(_)) + .WillOnce(IncrementArgument()); + + int n = 5; + foo.Baz(&n); // Should return 5 and change n to 6. +``` + +### Writing New Polymorphic Actions {#NewPolyActions} + +The previous recipe showed you how to define your own action. This is all good, +except that you need to know the type of the function in which the action will +be used. Sometimes that can be a problem. For example, if you want to use the +action in functions with *different* types (e.g. like `Return()` and +`SetArgPointee()`). + +If an action can be used in several types of mock functions, we say it's +*polymorphic*. The `MakePolymorphicAction()` function template makes it easy to +define such an action: + +```cpp +namespace testing { +template +PolymorphicAction MakePolymorphicAction(const Impl& impl); +} // namespace testing +``` + +As an example, let's define an action that returns the second argument in the +mock function's argument list. The first step is to define an implementation +class: + +```cpp +class ReturnSecondArgumentAction { + public: + template + Result Perform(const ArgumentTuple& args) const { + // To get the i-th (0-based) argument, use std::get(args). + return std::get<1>(args); + } +}; +``` + +This implementation class does *not* need to inherit from any particular class. +What matters is that it must have a `Perform()` method template. This method +template takes the mock function's arguments as a tuple in a **single** +argument, and returns the result of the action. It can be either `const` or not, +but must be invokable with exactly one template argument, which is the result +type. In other words, you must be able to call `Perform(args)` where `R` is +the mock function's return type and `args` is its arguments in a tuple. + +Next, we use `MakePolymorphicAction()` to turn an instance of the implementation +class into the polymorphic action we need. It will be convenient to have a +wrapper for this: + +```cpp +using ::testing::MakePolymorphicAction; +using ::testing::PolymorphicAction; + +PolymorphicAction ReturnSecondArgument() { + return MakePolymorphicAction(ReturnSecondArgumentAction()); +} +``` + +Now, you can use this polymorphic action the same way you use the built-in ones: + +```cpp +using ::testing::_; + +class MockFoo : public Foo { + public: + MOCK_METHOD(int, DoThis, (bool flag, int n), (override)); + MOCK_METHOD(string, DoThat, (int x, const char* str1, const char* str2), + (override)); +}; + + ... + MockFoo foo; + EXPECT_CALL(foo, DoThis).WillOnce(ReturnSecondArgument()); + EXPECT_CALL(foo, DoThat).WillOnce(ReturnSecondArgument()); + ... + foo.DoThis(true, 5); // Will return 5. + foo.DoThat(1, "Hi", "Bye"); // Will return "Hi". +``` + +### Teaching gMock How to Print Your Values + +When an uninteresting or unexpected call occurs, gMock prints the argument +values and the stack trace to help you debug. Assertion macros like +`EXPECT_THAT` and `EXPECT_EQ` also print the values in question when the +assertion fails. gMock and googletest do this using googletest's user-extensible +value printer. + +This printer knows how to print built-in C++ types, native arrays, STL +containers, and any type that supports the `<<` operator. For other types, it +prints the raw bytes in the value and hopes that you the user can figure it out. +[The GoogleTest advanced guide](advanced.md#teaching-googletest-how-to-print-your-values) +explains how to extend the printer to do a better job at printing your +particular type than to dump the bytes. + +## Useful Mocks Created Using gMock + + + + +### Mock std::function {#MockFunction} + +`std::function` is a general function type introduced in C++11. It is a +preferred way of passing callbacks to new interfaces. Functions are copiable, +and are not usually passed around by pointer, which makes them tricky to mock. +But fear not - `MockFunction` can help you with that. + +`MockFunction` has a mock method `Call()` with the signature: + +```cpp + R Call(T1, ..., Tn); +``` + +It also has a `AsStdFunction()` method, which creates a `std::function` proxy +forwarding to Call: + +```cpp + std::function AsStdFunction(); +``` + +To use `MockFunction`, first create `MockFunction` object and set up +expectations on its `Call` method. Then pass proxy obtained from +`AsStdFunction()` to the code you are testing. For example: + +```cpp +TEST(FooTest, RunsCallbackWithBarArgument) { + // 1. Create a mock object. + MockFunction mock_function; + + // 2. Set expectations on Call() method. + EXPECT_CALL(mock_function, Call("bar")).WillOnce(Return(1)); + + // 3. Exercise code that uses std::function. + Foo(mock_function.AsStdFunction()); + // Foo's signature can be either of: + // void Foo(const std::function& fun); + // void Foo(std::function fun); + + // 4. All expectations will be verified when mock_function + // goes out of scope and is destroyed. +} +``` + +Remember that function objects created with `AsStdFunction()` are just +forwarders. If you create multiple of them, they will share the same set of +expectations. + +Although `std::function` supports unlimited number of arguments, `MockFunction` +implementation is limited to ten. If you ever hit that limit... well, your +callback has bigger problems than being mockable. :-) diff --git a/_codeql_build_dir/_deps/googletest-src/docs/gmock_faq.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_faq.md new file mode 100644 index 0000000..2cd9b3f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/gmock_faq.md @@ -0,0 +1,390 @@ +# Legacy gMock FAQ + +### When I call a method on my mock object, the method for the real object is invoked instead. What's the problem? + +In order for a method to be mocked, it must be *virtual*, unless you use the +[high-perf dependency injection technique](gmock_cook_book.md#MockingNonVirtualMethods). + +### Can I mock a variadic function? + +You cannot mock a variadic function (i.e. a function taking ellipsis (`...`) +arguments) directly in gMock. + +The problem is that in general, there is *no way* for a mock object to know how +many arguments are passed to the variadic method, and what the arguments' types +are. Only the *author of the base class* knows the protocol, and we cannot look +into his or her head. + +Therefore, to mock such a function, the *user* must teach the mock object how to +figure out the number of arguments and their types. One way to do it is to +provide overloaded versions of the function. + +Ellipsis arguments are inherited from C and not really a C++ feature. They are +unsafe to use and don't work with arguments that have constructors or +destructors. Therefore we recommend to avoid them in C++ as much as possible. + +### MSVC gives me warning C4301 or C4373 when I define a mock method with a const parameter. Why? + +If you compile this using Microsoft Visual C++ 2005 SP1: + +```cpp +class Foo { + ... + virtual void Bar(const int i) = 0; +}; + +class MockFoo : public Foo { + ... + MOCK_METHOD(void, Bar, (const int i), (override)); +}; +``` + +You may get the following warning: + +```shell +warning C4301: 'MockFoo::Bar': overriding virtual function only differs from 'Foo::Bar' by const/volatile qualifier +``` + +This is a MSVC bug. The same code compiles fine with gcc, for example. If you +use Visual C++ 2008 SP1, you would get the warning: + +```shell +warning C4373: 'MockFoo::Bar': virtual function overrides 'Foo::Bar', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers +``` + +In C++, if you *declare* a function with a `const` parameter, the `const` +modifier is ignored. Therefore, the `Foo` base class above is equivalent to: + +```cpp +class Foo { + ... + virtual void Bar(int i) = 0; // int or const int? Makes no difference. +}; +``` + +In fact, you can *declare* `Bar()` with an `int` parameter, and define it with a +`const int` parameter. The compiler will still match them up. + +Since making a parameter `const` is meaningless in the method declaration, we +recommend to remove it in both `Foo` and `MockFoo`. That should workaround the +VC bug. + +Note that we are talking about the *top-level* `const` modifier here. If the +function parameter is passed by pointer or reference, declaring the pointee or +referee as `const` is still meaningful. For example, the following two +declarations are *not* equivalent: + +```cpp +void Bar(int* p); // Neither p nor *p is const. +void Bar(const int* p); // p is not const, but *p is. +``` + +### I can't figure out why gMock thinks my expectations are not satisfied. What should I do? + +You might want to run your test with `--gmock_verbose=info`. This flag lets +gMock print a trace of every mock function call it receives. By studying the +trace, you'll gain insights on why the expectations you set are not met. + +If you see the message "The mock function has no default action set, and its +return type has no default value set.", then try +[adding a default action](gmock_cheat_sheet.md#OnCall). Due to a known issue, +unexpected calls on mocks without default actions don't print out a detailed +comparison between the actual arguments and the expected arguments. + +### My program crashed and `ScopedMockLog` spit out tons of messages. Is it a gMock bug? + +gMock and `ScopedMockLog` are likely doing the right thing here. + +When a test crashes, the failure signal handler will try to log a lot of +information (the stack trace, and the address map, for example). The messages +are compounded if you have many threads with depth stacks. When `ScopedMockLog` +intercepts these messages and finds that they don't match any expectations, it +prints an error for each of them. + +You can learn to ignore the errors, or you can rewrite your expectations to make +your test more robust, for example, by adding something like: + +```cpp +using ::testing::AnyNumber; +using ::testing::Not; +... + // Ignores any log not done by us. + EXPECT_CALL(log, Log(_, Not(EndsWith("/my_file.cc")), _)) + .Times(AnyNumber()); +``` + +### How can I assert that a function is NEVER called? + +```cpp +using ::testing::_; +... + EXPECT_CALL(foo, Bar(_)) + .Times(0); +``` + +### I have a failed test where gMock tells me TWICE that a particular expectation is not satisfied. Isn't this redundant? + +When gMock detects a failure, it prints relevant information (the mock function +arguments, the state of relevant expectations, and etc) to help the user debug. +If another failure is detected, gMock will do the same, including printing the +state of relevant expectations. + +Sometimes an expectation's state didn't change between two failures, and you'll +see the same description of the state twice. They are however *not* redundant, +as they refer to *different points in time*. The fact they are the same *is* +interesting information. + +### I get a heapcheck failure when using a mock object, but using a real object is fine. What can be wrong? + +Does the class (hopefully a pure interface) you are mocking have a virtual +destructor? + +Whenever you derive from a base class, make sure its destructor is virtual. +Otherwise Bad Things will happen. Consider the following code: + +```cpp +class Base { + public: + // Not virtual, but should be. + ~Base() { ... } + ... +}; + +class Derived : public Base { + public: + ... + private: + std::string value_; +}; + +... + Base* p = new Derived; + ... + delete p; // Surprise! ~Base() will be called, but ~Derived() will not + // - value_ is leaked. +``` + +By changing `~Base()` to virtual, `~Derived()` will be correctly called when +`delete p` is executed, and the heap checker will be happy. + +### The "newer expectations override older ones" rule makes writing expectations awkward. Why does gMock do that? + +When people complain about this, often they are referring to code like: + +```cpp +using ::testing::Return; +... + // foo.Bar() should be called twice, return 1 the first time, and return + // 2 the second time. However, I have to write the expectations in the + // reverse order. This sucks big time!!! + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(2)) + .RetiresOnSaturation(); + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .RetiresOnSaturation(); +``` + +The problem, is that they didn't pick the **best** way to express the test's +intent. + +By default, expectations don't have to be matched in *any* particular order. If +you want them to match in a certain order, you need to be explicit. This is +gMock's (and jMock's) fundamental philosophy: it's easy to accidentally +over-specify your tests, and we want to make it harder to do so. + +There are two better ways to write the test spec. You could either put the +expectations in sequence: + +```cpp +using ::testing::Return; +... + // foo.Bar() should be called twice, return 1 the first time, and return + // 2 the second time. Using a sequence, we can write the expectations + // in their natural order. + { + InSequence s; + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .RetiresOnSaturation(); + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(2)) + .RetiresOnSaturation(); + } +``` + +or you can put the sequence of actions in the same expectation: + +```cpp +using ::testing::Return; +... + // foo.Bar() should be called twice, return 1 the first time, and return + // 2 the second time. + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .WillOnce(Return(2)) + .RetiresOnSaturation(); +``` + +Back to the original questions: why does gMock search the expectations (and +`ON_CALL`s) from back to front? Because this allows a user to set up a mock's +behavior for the common case early (e.g. in the mock's constructor or the test +fixture's set-up phase) and customize it with more specific rules later. If +gMock searches from front to back, this very useful pattern won't be possible. + +### gMock prints a warning when a function without EXPECT_CALL is called, even if I have set its behavior using ON_CALL. Would it be reasonable not to show the warning in this case? + +When choosing between being neat and being safe, we lean toward the latter. So +the answer is that we think it's better to show the warning. + +Often people write `ON_CALL`s in the mock object's constructor or `SetUp()`, as +the default behavior rarely changes from test to test. Then in the test body +they set the expectations, which are often different for each test. Having an +`ON_CALL` in the set-up part of a test doesn't mean that the calls are expected. +If there's no `EXPECT_CALL` and the method is called, it's possibly an error. If +we quietly let the call go through without notifying the user, bugs may creep in +unnoticed. + +If, however, you are sure that the calls are OK, you can write + +```cpp +using ::testing::_; +... + EXPECT_CALL(foo, Bar(_)) + .WillRepeatedly(...); +``` + +instead of + +```cpp +using ::testing::_; +... + ON_CALL(foo, Bar(_)) + .WillByDefault(...); +``` + +This tells gMock that you do expect the calls and no warning should be printed. + +Also, you can control the verbosity by specifying `--gmock_verbose=error`. Other +values are `info` and `warning`. If you find the output too noisy when +debugging, just choose a less verbose level. + +### How can I delete the mock function's argument in an action? + +If your mock function takes a pointer argument and you want to delete that +argument, you can use testing::DeleteArg() to delete the N'th (zero-indexed) +argument: + +```cpp +using ::testing::_; + ... + MOCK_METHOD(void, Bar, (X* x, const Y& y)); + ... + EXPECT_CALL(mock_foo_, Bar(_, _)) + .WillOnce(testing::DeleteArg<0>())); +``` + +### How can I perform an arbitrary action on a mock function's argument? + +If you find yourself needing to perform some action that's not supported by +gMock directly, remember that you can define your own actions using +[`MakeAction()`](#NewMonoActions) or +[`MakePolymorphicAction()`](#NewPolyActions), or you can write a stub function +and invoke it using [`Invoke()`](#FunctionsAsActions). + +```cpp +using ::testing::_; +using ::testing::Invoke; + ... + MOCK_METHOD(void, Bar, (X* p)); + ... + EXPECT_CALL(mock_foo_, Bar(_)) + .WillOnce(Invoke(MyAction(...))); +``` + +### My code calls a static/global function. Can I mock it? + +You can, but you need to make some changes. + +In general, if you find yourself needing to mock a static function, it's a sign +that your modules are too tightly coupled (and less flexible, less reusable, +less testable, etc). You are probably better off defining a small interface and +call the function through that interface, which then can be easily mocked. It's +a bit of work initially, but usually pays for itself quickly. + +This Google Testing Blog +[post](https://testing.googleblog.com/2008/06/defeat-static-cling.html) says it +excellently. Check it out. + +### My mock object needs to do complex stuff. It's a lot of pain to specify the actions. gMock sucks! + +I know it's not a question, but you get an answer for free any way. :-) + +With gMock, you can create mocks in C++ easily. And people might be tempted to +use them everywhere. Sometimes they work great, and sometimes you may find them, +well, a pain to use. So, what's wrong in the latter case? + +When you write a test without using mocks, you exercise the code and assert that +it returns the correct value or that the system is in an expected state. This is +sometimes called "state-based testing". + +Mocks are great for what some call "interaction-based" testing: instead of +checking the system state at the very end, mock objects verify that they are +invoked the right way and report an error as soon as it arises, giving you a +handle on the precise context in which the error was triggered. This is often +more effective and economical to do than state-based testing. + +If you are doing state-based testing and using a test double just to simulate +the real object, you are probably better off using a fake. Using a mock in this +case causes pain, as it's not a strong point for mocks to perform complex +actions. If you experience this and think that mocks suck, you are just not +using the right tool for your problem. Or, you might be trying to solve the +wrong problem. :-) + +### I got a warning "Uninteresting function call encountered - default action taken.." Should I panic? + +By all means, NO! It's just an FYI. :-) + +What it means is that you have a mock function, you haven't set any expectations +on it (by gMock's rule this means that you are not interested in calls to this +function and therefore it can be called any number of times), and it is called. +That's OK - you didn't say it's not OK to call the function! + +What if you actually meant to disallow this function to be called, but forgot to +write `EXPECT_CALL(foo, Bar()).Times(0)`? While one can argue that it's the +user's fault, gMock tries to be nice and prints you a note. + +So, when you see the message and believe that there shouldn't be any +uninteresting calls, you should investigate what's going on. To make your life +easier, gMock dumps the stack trace when an uninteresting call is encountered. +From that you can figure out which mock function it is, and how it is called. + +### I want to define a custom action. Should I use Invoke() or implement the ActionInterface interface? + +Either way is fine - you want to choose the one that's more convenient for your +circumstance. + +Usually, if your action is for a particular function type, defining it using +`Invoke()` should be easier; if your action can be used in functions of +different types (e.g. if you are defining `Return(*value*)`), +`MakePolymorphicAction()` is easiest. Sometimes you want precise control on what +types of functions the action can be used in, and implementing `ActionInterface` +is the way to go here. See the implementation of `Return()` in +`testing/base/public/gmock-actions.h` for an example. + +### I use SetArgPointee() in WillOnce(), but gcc complains about "conflicting return type specified". What does it mean? + +You got this error as gMock has no idea what value it should return when the +mock method is called. `SetArgPointee()` says what the side effect is, but +doesn't say what the return value should be. You need `DoAll()` to chain a +`SetArgPointee()` with a `Return()` that provides a value appropriate to the API +being mocked. + +See this [recipe](gmock_cook_book.md#mocking-side-effects) for more details and +an example. + +### I have a huge mock class, and Microsoft Visual C++ runs out of memory when compiling it. What can I do? + +We've noticed that when the `/clr` compiler flag is used, Visual C++ uses 5~6 +times as much memory when compiling a mock class. We suggest to avoid `/clr` +when compiling native C++ mocks. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/gmock_for_dummies.md b/_codeql_build_dir/_deps/googletest-src/docs/gmock_for_dummies.md new file mode 100644 index 0000000..1f4cc24 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/gmock_for_dummies.md @@ -0,0 +1,700 @@ +# gMock for Dummies + +## What Is gMock? + +When you write a prototype or test, often it's not feasible or wise to rely on +real objects entirely. A **mock object** implements the same interface as a real +object (so it can be used as one), but lets you specify at run time how it will +be used and what it should do (which methods will be called? in which order? how +many times? with what arguments? what will they return? etc). + +It is easy to confuse the term *fake objects* with mock objects. Fakes and mocks +actually mean very different things in the Test-Driven Development (TDD) +community: + +* **Fake** objects have working implementations, but usually take some + shortcut (perhaps to make the operations less expensive), which makes them + not suitable for production. An in-memory file system would be an example of + a fake. +* **Mocks** are objects pre-programmed with *expectations*, which form a + specification of the calls they are expected to receive. + +If all this seems too abstract for you, don't worry - the most important thing +to remember is that a mock allows you to check the *interaction* between itself +and code that uses it. The difference between fakes and mocks shall become much +clearer once you start to use mocks. + +**gMock** is a library (sometimes we also call it a "framework" to make it sound +cool) for creating mock classes and using them. It does to C++ what +jMock/EasyMock does to Java (well, more or less). + +When using gMock, + +1. first, you use some simple macros to describe the interface you want to + mock, and they will expand to the implementation of your mock class; +2. next, you create some mock objects and specify its expectations and behavior + using an intuitive syntax; +3. then you exercise code that uses the mock objects. gMock will catch any + violation to the expectations as soon as it arises. + +## Why gMock? + +While mock objects help you remove unnecessary dependencies in tests and make +them fast and reliable, using mocks manually in C++ is *hard*: + +* Someone has to implement the mocks. The job is usually tedious and + error-prone. No wonder people go great distance to avoid it. +* The quality of those manually written mocks is a bit, uh, unpredictable. You + may see some really polished ones, but you may also see some that were + hacked up in a hurry and have all sorts of ad hoc restrictions. +* The knowledge you gained from using one mock doesn't transfer to the next + one. + +In contrast, Java and Python programmers have some fine mock frameworks (jMock, +EasyMock, etc), which automate the creation of mocks. As a result, mocking is a +proven effective technique and widely adopted practice in those communities. +Having the right tool absolutely makes the difference. + +gMock was built to help C++ programmers. It was inspired by jMock and EasyMock, +but designed with C++'s specifics in mind. It is your friend if any of the +following problems is bothering you: + +* You are stuck with a sub-optimal design and wish you had done more + prototyping before it was too late, but prototyping in C++ is by no means + "rapid". +* Your tests are slow as they depend on too many libraries or use expensive + resources (e.g. a database). +* Your tests are brittle as some resources they use are unreliable (e.g. the + network). +* You want to test how your code handles a failure (e.g. a file checksum + error), but it's not easy to cause one. +* You need to make sure that your module interacts with other modules in the + right way, but it's hard to observe the interaction; therefore you resort to + observing the side effects at the end of the action, but it's awkward at + best. +* You want to "mock out" your dependencies, except that they don't have mock + implementations yet; and, frankly, you aren't thrilled by some of those + hand-written mocks. + +We encourage you to use gMock as + +* a *design* tool, for it lets you experiment with your interface design early + and often. More iterations lead to better designs! +* a *testing* tool to cut your tests' outbound dependencies and probe the + interaction between your module and its collaborators. + +## Getting Started + +gMock is bundled with googletest. + +## A Case for Mock Turtles + +Let's look at an example. Suppose you are developing a graphics program that +relies on a [LOGO](http://en.wikipedia.org/wiki/Logo_programming_language)-like +API for drawing. How would you test that it does the right thing? Well, you can +run it and compare the screen with a golden screen snapshot, but let's admit it: +tests like this are expensive to run and fragile (What if you just upgraded to a +shiny new graphics card that has better anti-aliasing? Suddenly you have to +update all your golden images.). It would be too painful if all your tests are +like this. Fortunately, you learned about +[Dependency Injection](http://en.wikipedia.org/wiki/Dependency_injection) and know the right thing +to do: instead of having your application talk to the system API directly, wrap +the API in an interface (say, `Turtle`) and code to that interface: + +```cpp +class Turtle { + ... + virtual ~Turtle() {} + virtual void PenUp() = 0; + virtual void PenDown() = 0; + virtual void Forward(int distance) = 0; + virtual void Turn(int degrees) = 0; + virtual void GoTo(int x, int y) = 0; + virtual int GetX() const = 0; + virtual int GetY() const = 0; +}; +``` + +(Note that the destructor of `Turtle` **must** be virtual, as is the case for +**all** classes you intend to inherit from - otherwise the destructor of the +derived class will not be called when you delete an object through a base +pointer, and you'll get corrupted program states like memory leaks.) + +You can control whether the turtle's movement will leave a trace using `PenUp()` +and `PenDown()`, and control its movement using `Forward()`, `Turn()`, and +`GoTo()`. Finally, `GetX()` and `GetY()` tell you the current position of the +turtle. + +Your program will normally use a real implementation of this interface. In +tests, you can use a mock implementation instead. This allows you to easily +check what drawing primitives your program is calling, with what arguments, and +in which order. Tests written this way are much more robust (they won't break +because your new machine does anti-aliasing differently), easier to read and +maintain (the intent of a test is expressed in the code, not in some binary +images), and run *much, much faster*. + +## Writing the Mock Class + +If you are lucky, the mocks you need to use have already been implemented by +some nice people. If, however, you find yourself in the position to write a mock +class, relax - gMock turns this task into a fun game! (Well, almost.) + +### How to Define It + +Using the `Turtle` interface as example, here are the simple steps you need to +follow: + +* Derive a class `MockTurtle` from `Turtle`. +* Take a *virtual* function of `Turtle` (while it's possible to + [mock non-virtual methods using templates](gmock_cook_book.md#MockingNonVirtualMethods), + it's much more involved). +* In the `public:` section of the child class, write `MOCK_METHOD();` +* Now comes the fun part: you take the function signature, cut-and-paste it + into the macro, and add two commas - one between the return type and the + name, another between the name and the argument list. +* If you're mocking a const method, add a 4th parameter containing `(const)` + (the parentheses are required). +* Since you're overriding a virtual method, we suggest adding the `override` + keyword. For const methods the 4th parameter becomes `(const, override)`, + for non-const methods just `(override)`. This isn't mandatory. +* Repeat until all virtual functions you want to mock are done. (It goes + without saying that *all* pure virtual methods in your abstract class must + be either mocked or overridden.) + +After the process, you should have something like: + +```cpp +#include "gmock/gmock.h" // Brings in gMock. + +class MockTurtle : public Turtle { + public: + ... + MOCK_METHOD(void, PenUp, (), (override)); + MOCK_METHOD(void, PenDown, (), (override)); + MOCK_METHOD(void, Forward, (int distance), (override)); + MOCK_METHOD(void, Turn, (int degrees), (override)); + MOCK_METHOD(void, GoTo, (int x, int y), (override)); + MOCK_METHOD(int, GetX, (), (const, override)); + MOCK_METHOD(int, GetY, (), (const, override)); +}; +``` + +You don't need to define these mock methods somewhere else - the `MOCK_METHOD` +macro will generate the definitions for you. It's that simple! + +### Where to Put It + +When you define a mock class, you need to decide where to put its definition. +Some people put it in a `_test.cc`. This is fine when the interface being mocked +(say, `Foo`) is owned by the same person or team. Otherwise, when the owner of +`Foo` changes it, your test could break. (You can't really expect `Foo`'s +maintainer to fix every test that uses `Foo`, can you?) + +So, the rule of thumb is: if you need to mock `Foo` and it's owned by others, +define the mock class in `Foo`'s package (better, in a `testing` sub-package +such that you can clearly separate production code and testing utilities), put +it in a `.h` and a `cc_library`. Then everyone can reference them from their +tests. If `Foo` ever changes, there is only one copy of `MockFoo` to change, and +only tests that depend on the changed methods need to be fixed. + +Another way to do it: you can introduce a thin layer `FooAdaptor` on top of +`Foo` and code to this new interface. Since you own `FooAdaptor`, you can absorb +changes in `Foo` much more easily. While this is more work initially, carefully +choosing the adaptor interface can make your code easier to write and more +readable (a net win in the long run), as you can choose `FooAdaptor` to fit your +specific domain much better than `Foo` does. + +## Using Mocks in Tests + +Once you have a mock class, using it is easy. The typical work flow is: + +1. Import the gMock names from the `testing` namespace such that you can use + them unqualified (You only have to do it once per file). Remember that + namespaces are a good idea. +2. Create some mock objects. +3. Specify your expectations on them (How many times will a method be called? + With what arguments? What should it do? etc.). +4. Exercise some code that uses the mocks; optionally, check the result using + googletest assertions. If a mock method is called more than expected or with + wrong arguments, you'll get an error immediately. +5. When a mock is destructed, gMock will automatically check whether all + expectations on it have been satisfied. + +Here's an example: + +```cpp +#include "path/to/mock-turtle.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +using ::testing::AtLeast; // #1 + +TEST(PainterTest, CanDrawSomething) { + MockTurtle turtle; // #2 + EXPECT_CALL(turtle, PenDown()) // #3 + .Times(AtLeast(1)); + + Painter painter(&turtle); // #4 + + EXPECT_TRUE(painter.DrawCircle(0, 0, 10)); // #5 +} +``` + +As you might have guessed, this test checks that `PenDown()` is called at least +once. If the `painter` object didn't call this method, your test will fail with +a message like this: + +```text +path/to/my_test.cc:119: Failure +Actual function call count doesn't match this expectation: +Actually: never called; +Expected: called at least once. +Stack trace: +... +``` + +**Tip 1:** If you run the test from an Emacs buffer, you can hit `` on +the line number to jump right to the failed expectation. + +**Tip 2:** If your mock objects are never deleted, the final verification won't +happen. Therefore it's a good idea to turn on the heap checker in your tests +when you allocate mocks on the heap. You get that automatically if you use the +`gtest_main` library already. + +**Important note:** gMock requires expectations to be set **before** the mock +functions are called, otherwise the behavior is **undefined**. Do not alternate +between calls to `EXPECT_CALL()` and calls to the mock functions, and do not set +any expectations on a mock after passing the mock to an API. + +This means `EXPECT_CALL()` should be read as expecting that a call will occur +*in the future*, not that a call has occurred. Why does gMock work like that? +Well, specifying the expectation beforehand allows gMock to report a violation +as soon as it rises, when the context (stack trace, etc) is still available. +This makes debugging much easier. + +Admittedly, this test is contrived and doesn't do much. You can easily achieve +the same effect without using gMock. However, as we shall reveal soon, gMock +allows you to do *so much more* with the mocks. + +## Setting Expectations + +The key to using a mock object successfully is to set the *right expectations* +on it. If you set the expectations too strict, your test will fail as the result +of unrelated changes. If you set them too loose, bugs can slip through. You want +to do it just right such that your test can catch exactly the kind of bugs you +intend it to catch. gMock provides the necessary means for you to do it "just +right." + +### General Syntax + +In gMock we use the `EXPECT_CALL()` macro to set an expectation on a mock +method. The general syntax is: + +```cpp +EXPECT_CALL(mock_object, method(matchers)) + .Times(cardinality) + .WillOnce(action) + .WillRepeatedly(action); +``` + +The macro has two arguments: first the mock object, and then the method and its +arguments. Note that the two are separated by a comma (`,`), not a period (`.`). +(Why using a comma? The answer is that it was necessary for technical reasons.) +If the method is not overloaded, the macro can also be called without matchers: + +```cpp +EXPECT_CALL(mock_object, non-overloaded-method) + .Times(cardinality) + .WillOnce(action) + .WillRepeatedly(action); +``` + +This syntax allows the test writer to specify "called with any arguments" +without explicitly specifying the number or types of arguments. To avoid +unintended ambiguity, this syntax may only be used for methods that are not +overloaded. + +Either form of the macro can be followed by some optional *clauses* that provide +more information about the expectation. We'll discuss how each clause works in +the coming sections. + +This syntax is designed to make an expectation read like English. For example, +you can probably guess that + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetX()) + .Times(5) + .WillOnce(Return(100)) + .WillOnce(Return(150)) + .WillRepeatedly(Return(200)); +``` + +says that the `turtle` object's `GetX()` method will be called five times, it +will return 100 the first time, 150 the second time, and then 200 every time. +Some people like to call this style of syntax a Domain-Specific Language (DSL). + +{: .callout .note} +**Note:** Why do we use a macro to do this? Well it serves two purposes: first +it makes expectations easily identifiable (either by `grep` or by a human +reader), and second it allows gMock to include the source file location of a +failed expectation in messages, making debugging easier. + +### Matchers: What Arguments Do We Expect? + +When a mock function takes arguments, we may specify what arguments we are +expecting, for example: + +```cpp +// Expects the turtle to move forward by 100 units. +EXPECT_CALL(turtle, Forward(100)); +``` + +Oftentimes you do not want to be too specific. Remember that talk about tests +being too rigid? Over specification leads to brittle tests and obscures the +intent of tests. Therefore we encourage you to specify only what's necessary—no +more, no less. If you aren't interested in the value of an argument, write `_` +as the argument, which means "anything goes": + +```cpp +using ::testing::_; +... +// Expects that the turtle jumps to somewhere on the x=50 line. +EXPECT_CALL(turtle, GoTo(50, _)); +``` + +`_` is an instance of what we call **matchers**. A matcher is like a predicate +and can test whether an argument is what we'd expect. You can use a matcher +inside `EXPECT_CALL()` wherever a function argument is expected. `_` is a +convenient way of saying "any value". + +In the above examples, `100` and `50` are also matchers; implicitly, they are +the same as `Eq(100)` and `Eq(50)`, which specify that the argument must be +equal (using `operator==`) to the matcher argument. There are many +[built-in matchers](reference/matchers.md) for common types (as well as +[custom matchers](gmock_cook_book.md#NewMatchers)); for example: + +```cpp +using ::testing::Ge; +... +// Expects the turtle moves forward by at least 100. +EXPECT_CALL(turtle, Forward(Ge(100))); +``` + +If you don't care about *any* arguments, rather than specify `_` for each of +them you may instead omit the parameter list: + +```cpp +// Expects the turtle to move forward. +EXPECT_CALL(turtle, Forward); +// Expects the turtle to jump somewhere. +EXPECT_CALL(turtle, GoTo); +``` + +This works for all non-overloaded methods; if a method is overloaded, you need +to help gMock resolve which overload is expected by specifying the number of +arguments and possibly also the +[types of the arguments](gmock_cook_book.md#SelectOverload). + +### Cardinalities: How Many Times Will It Be Called? + +The first clause we can specify following an `EXPECT_CALL()` is `Times()`. We +call its argument a **cardinality** as it tells *how many times* the call should +occur. It allows us to repeat an expectation many times without actually writing +it as many times. More importantly, a cardinality can be "fuzzy", just like a +matcher can be. This allows a user to express the intent of a test exactly. + +An interesting special case is when we say `Times(0)`. You may have guessed - it +means that the function shouldn't be called with the given arguments at all, and +gMock will report a googletest failure whenever the function is (wrongfully) +called. + +We've seen `AtLeast(n)` as an example of fuzzy cardinalities earlier. For the +list of built-in cardinalities you can use, see +[here](gmock_cheat_sheet.md#CardinalityList). + +The `Times()` clause can be omitted. **If you omit `Times()`, gMock will infer +the cardinality for you.** The rules are easy to remember: + +* If **neither** `WillOnce()` **nor** `WillRepeatedly()` is in the + `EXPECT_CALL()`, the inferred cardinality is `Times(1)`. +* If there are *n* `WillOnce()`'s but **no** `WillRepeatedly()`, where *n* >= + 1, the cardinality is `Times(n)`. +* If there are *n* `WillOnce()`'s and **one** `WillRepeatedly()`, where *n* >= + 0, the cardinality is `Times(AtLeast(n))`. + +**Quick quiz:** what do you think will happen if a function is expected to be +called twice but actually called four times? + +### Actions: What Should It Do? + +Remember that a mock object doesn't really have a working implementation? We as +users have to tell it what to do when a method is invoked. This is easy in +gMock. + +First, if the return type of a mock function is a built-in type or a pointer, +the function has a **default action** (a `void` function will just return, a +`bool` function will return `false`, and other functions will return 0). In +addition, in C++ 11 and above, a mock function whose return type is +default-constructible (i.e. has a default constructor) has a default action of +returning a default-constructed value. If you don't say anything, this behavior +will be used. + +Second, if a mock function doesn't have a default action, or the default action +doesn't suit you, you can specify the action to be taken each time the +expectation matches using a series of `WillOnce()` clauses followed by an +optional `WillRepeatedly()`. For example, + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(100)) + .WillOnce(Return(200)) + .WillOnce(Return(300)); +``` + +says that `turtle.GetX()` will be called *exactly three times* (gMock inferred +this from how many `WillOnce()` clauses we've written, since we didn't +explicitly write `Times()`), and will return 100, 200, and 300 respectively. + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetY()) + .WillOnce(Return(100)) + .WillOnce(Return(200)) + .WillRepeatedly(Return(300)); +``` + +says that `turtle.GetY()` will be called *at least twice* (gMock knows this as +we've written two `WillOnce()` clauses and a `WillRepeatedly()` while having no +explicit `Times()`), will return 100 and 200 respectively the first two times, +and 300 from the third time on. + +Of course, if you explicitly write a `Times()`, gMock will not try to infer the +cardinality itself. What if the number you specified is larger than there are +`WillOnce()` clauses? Well, after all `WillOnce()`s are used up, gMock will do +the *default* action for the function every time (unless, of course, you have a +`WillRepeatedly()`.). + +What can we do inside `WillOnce()` besides `Return()`? You can return a +reference using `ReturnRef(*variable*)`, or invoke a pre-defined function, among +[others](gmock_cook_book.md#using-actions). + +**Important note:** The `EXPECT_CALL()` statement evaluates the action clause +only once, even though the action may be performed many times. Therefore you +must be careful about side effects. The following may not do what you want: + +```cpp +using ::testing::Return; +... +int n = 100; +EXPECT_CALL(turtle, GetX()) + .Times(4) + .WillRepeatedly(Return(n++)); +``` + +Instead of returning 100, 101, 102, ..., consecutively, this mock function will +always return 100 as `n++` is only evaluated once. Similarly, `Return(new Foo)` +will create a new `Foo` object when the `EXPECT_CALL()` is executed, and will +return the same pointer every time. If you want the side effect to happen every +time, you need to define a custom action, which we'll teach in the +[cook book](gmock_cook_book.md). + +Time for another quiz! What do you think the following means? + +```cpp +using ::testing::Return; +... +EXPECT_CALL(turtle, GetY()) + .Times(4) + .WillOnce(Return(100)); +``` + +Obviously `turtle.GetY()` is expected to be called four times. But if you think +it will return 100 every time, think twice! Remember that one `WillOnce()` +clause will be consumed each time the function is invoked and the default action +will be taken afterwards. So the right answer is that `turtle.GetY()` will +return 100 the first time, but **return 0 from the second time on**, as +returning 0 is the default action for `int` functions. + +### Using Multiple Expectations {#MultiExpectations} + +So far we've only shown examples where you have a single expectation. More +realistically, you'll specify expectations on multiple mock methods which may be +from multiple mock objects. + +By default, when a mock method is invoked, gMock will search the expectations in +the **reverse order** they are defined, and stop when an active expectation that +matches the arguments is found (you can think of it as "newer rules override +older ones."). If the matching expectation cannot take any more calls, you will +get an upper-bound-violated failure. Here's an example: + +```cpp +using ::testing::_; +... +EXPECT_CALL(turtle, Forward(_)); // #1 +EXPECT_CALL(turtle, Forward(10)) // #2 + .Times(2); +``` + +If `Forward(10)` is called three times in a row, the third time it will be an +error, as the last matching expectation (#2) has been saturated. If, however, +the third `Forward(10)` call is replaced by `Forward(20)`, then it would be OK, +as now #1 will be the matching expectation. + +{: .callout .note} +**Note:** Why does gMock search for a match in the *reverse* order of the +expectations? The reason is that this allows a user to set up the default +expectations in a mock object's constructor or the test fixture's set-up phase +and then customize the mock by writing more specific expectations in the test +body. So, if you have two expectations on the same method, you want to put the +one with more specific matchers **after** the other, or the more specific rule +would be shadowed by the more general one that comes after it. + +{: .callout .tip} +**Tip:** It is very common to start with a catch-all expectation for a method +and `Times(AnyNumber())` (omitting arguments, or with `_` for all arguments, if +overloaded). This makes any calls to the method expected. This is not necessary +for methods that are not mentioned at all (these are "uninteresting"), but is +useful for methods that have some expectations, but for which other calls are +ok. See +[Understanding Uninteresting vs Unexpected Calls](gmock_cook_book.md#uninteresting-vs-unexpected). + +### Ordered vs Unordered Calls {#OrderedCalls} + +By default, an expectation can match a call even though an earlier expectation +hasn't been satisfied. In other words, the calls don't have to occur in the +order the expectations are specified. + +Sometimes, you may want all the expected calls to occur in a strict order. To +say this in gMock is easy: + +```cpp +using ::testing::InSequence; +... +TEST(FooTest, DrawsLineSegment) { + ... + { + InSequence seq; + + EXPECT_CALL(turtle, PenDown()); + EXPECT_CALL(turtle, Forward(100)); + EXPECT_CALL(turtle, PenUp()); + } + Foo(); +} +``` + +By creating an object of type `InSequence`, all expectations in its scope are +put into a *sequence* and have to occur *sequentially*. Since we are just +relying on the constructor and destructor of this object to do the actual work, +its name is really irrelevant. + +In this example, we test that `Foo()` calls the three expected functions in the +order as written. If a call is made out-of-order, it will be an error. + +(What if you care about the relative order of some of the calls, but not all of +them? Can you specify an arbitrary partial order? The answer is ... yes! The +details can be found [here](gmock_cook_book.md#OrderedCalls).) + +### All Expectations Are Sticky (Unless Said Otherwise) {#StickyExpectations} + +Now let's do a quick quiz to see how well you can use this mock stuff already. +How would you test that the turtle is asked to go to the origin *exactly twice* +(you want to ignore any other instructions it receives)? + +After you've come up with your answer, take a look at ours and compare notes +(solve it yourself first - don't cheat!): + +```cpp +using ::testing::_; +using ::testing::AnyNumber; +... +EXPECT_CALL(turtle, GoTo(_, _)) // #1 + .Times(AnyNumber()); +EXPECT_CALL(turtle, GoTo(0, 0)) // #2 + .Times(2); +``` + +Suppose `turtle.GoTo(0, 0)` is called three times. In the third time, gMock will +see that the arguments match expectation #2 (remember that we always pick the +last matching expectation). Now, since we said that there should be only two +such calls, gMock will report an error immediately. This is basically what we've +told you in the [Using Multiple Expectations](#MultiExpectations) section above. + +This example shows that **expectations in gMock are "sticky" by default**, in +the sense that they remain active even after we have reached their invocation +upper bounds. This is an important rule to remember, as it affects the meaning +of the spec, and is **different** to how it's done in many other mocking +frameworks (Why'd we do that? Because we think our rule makes the common cases +easier to express and understand.). + +Simple? Let's see if you've really understood it: what does the following code +say? + +```cpp +using ::testing::Return; +... +for (int i = n; i > 0; i--) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)); +} +``` + +If you think it says that `turtle.GetX()` will be called `n` times and will +return 10, 20, 30, ..., consecutively, think twice! The problem is that, as we +said, expectations are sticky. So, the second time `turtle.GetX()` is called, +the last (latest) `EXPECT_CALL()` statement will match, and will immediately +lead to an "upper bound violated" error - this piece of code is not very useful! + +One correct way of saying that `turtle.GetX()` will return 10, 20, 30, ..., is +to explicitly say that the expectations are *not* sticky. In other words, they +should *retire* as soon as they are saturated: + +```cpp +using ::testing::Return; +... +for (int i = n; i > 0; i--) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)) + .RetiresOnSaturation(); +} +``` + +And, there's a better way to do it: in this case, we expect the calls to occur +in a specific order, and we line up the actions to match the order. Since the +order is important here, we should make it explicit using a sequence: + +```cpp +using ::testing::InSequence; +using ::testing::Return; +... +{ + InSequence s; + + for (int i = 1; i <= n; i++) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)) + .RetiresOnSaturation(); + } +} +``` + +By the way, the other situation where an expectation may *not* be sticky is when +it's in a sequence - as soon as another expectation that comes after it in the +sequence has been used, it automatically retires (and will never be used to +match any call). + +### Uninteresting Calls + +A mock object may have many methods, and not all of them are that interesting. +For example, in some tests we may not care about how many times `GetX()` and +`GetY()` get called. + +In gMock, if you are not interested in a method, just don't say anything about +it. If a call to this method occurs, you'll see a warning in the test output, +but it won't be a failure. This is called "naggy" behavior; to change, see +[The Nice, the Strict, and the Naggy](gmock_cook_book.md#NiceStrictNaggy). diff --git a/_codeql_build_dir/_deps/googletest-src/docs/index.md b/_codeql_build_dir/_deps/googletest-src/docs/index.md new file mode 100644 index 0000000..b162c74 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/index.md @@ -0,0 +1,22 @@ +# GoogleTest User's Guide + +## Welcome to GoogleTest! + +GoogleTest is Google's C++ testing and mocking framework. This user's guide has +the following contents: + +* [GoogleTest Primer](primer.md) - Teaches you how to write simple tests using + GoogleTest. Read this first if you are new to GoogleTest. +* [GoogleTest Advanced](advanced.md) - Read this when you've finished the + Primer and want to utilize GoogleTest to its full potential. +* [GoogleTest Samples](samples.md) - Describes some GoogleTest samples. +* [GoogleTest FAQ](faq.md) - Have a question? Want some tips? Check here + first. +* [Mocking for Dummies](gmock_for_dummies.md) - Teaches you how to create mock + objects and use them in tests. +* [Mocking Cookbook](gmock_cook_book.md) - Includes tips and approaches to + common mocking use cases. +* [Mocking Cheat Sheet](gmock_cheat_sheet.md) - A handy reference for + matchers, actions, invariants, and more. +* [Mocking FAQ](gmock_faq.md) - Contains answers to some mocking-specific + questions. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/pkgconfig.md b/_codeql_build_dir/_deps/googletest-src/docs/pkgconfig.md new file mode 100644 index 0000000..768e9b4 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/pkgconfig.md @@ -0,0 +1,148 @@ +## Using GoogleTest from various build systems + +GoogleTest comes with pkg-config files that can be used to determine all +necessary flags for compiling and linking to GoogleTest (and GoogleMock). +Pkg-config is a standardised plain-text format containing + +* the includedir (-I) path +* necessary macro (-D) definitions +* further required flags (-pthread) +* the library (-L) path +* the library (-l) to link to + +All current build systems support pkg-config in one way or another. For all +examples here we assume you want to compile the sample +`samples/sample3_unittest.cc`. + +### CMake + +Using `pkg-config` in CMake is fairly easy: + +```cmake +cmake_minimum_required(VERSION 3.0) + +cmake_policy(SET CMP0048 NEW) +project(my_gtest_pkgconfig VERSION 0.0.1 LANGUAGES CXX) + +find_package(PkgConfig) +pkg_search_module(GTEST REQUIRED gtest_main) + +add_executable(testapp samples/sample3_unittest.cc) +target_link_libraries(testapp ${GTEST_LDFLAGS}) +target_compile_options(testapp PUBLIC ${GTEST_CFLAGS}) + +include(CTest) +add_test(first_and_only_test testapp) +``` + +It is generally recommended that you use `target_compile_options` + `_CFLAGS` +over `target_include_directories` + `_INCLUDE_DIRS` as the former includes not +just -I flags (GoogleTest might require a macro indicating to internal headers +that all libraries have been compiled with threading enabled. In addition, +GoogleTest might also require `-pthread` in the compiling step, and as such +splitting the pkg-config `Cflags` variable into include dirs and macros for +`target_compile_definitions()` might still miss this). The same recommendation +goes for using `_LDFLAGS` over the more commonplace `_LIBRARIES`, which happens +to discard `-L` flags and `-pthread`. + +### Help! pkg-config can't find GoogleTest! + +Let's say you have a `CMakeLists.txt` along the lines of the one in this +tutorial and you try to run `cmake`. It is very possible that you get a failure +along the lines of: + +``` +-- Checking for one of the modules 'gtest_main' +CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:640 (message): + None of the required 'gtest_main' found +``` + +These failures are common if you installed GoogleTest yourself and have not +sourced it from a distro or other package manager. If so, you need to tell +pkg-config where it can find the `.pc` files containing the information. Say you +installed GoogleTest to `/usr/local`, then it might be that the `.pc` files are +installed under `/usr/local/lib64/pkgconfig`. If you set + +``` +export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig +``` + +pkg-config will also try to look in `PKG_CONFIG_PATH` to find `gtest_main.pc`. + +### Using pkg-config in a cross-compilation setting + +Pkg-config can be used in a cross-compilation setting too. To do this, let's +assume the final prefix of the cross-compiled installation will be `/usr`, and +your sysroot is `/home/MYUSER/sysroot`. Configure and install GTest using + +``` +mkdir build && cmake -DCMAKE_INSTALL_PREFIX=/usr .. +``` + +Install into the sysroot using `DESTDIR`: + +``` +make -j install DESTDIR=/home/MYUSER/sysroot +``` + +Before we continue, it is recommended to **always** define the following two +variables for pkg-config in a cross-compilation setting: + +``` +export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=yes +export PKG_CONFIG_ALLOW_SYSTEM_LIBS=yes +``` + +otherwise `pkg-config` will filter `-I` and `-L` flags against standard prefixes +such as `/usr` (see https://bugs.freedesktop.org/show_bug.cgi?id=28264#c3 for +reasons why this stripping needs to occur usually). + +If you look at the generated pkg-config file, it will look something like + +``` +libdir=/usr/lib64 +includedir=/usr/include + +Name: gtest +Description: GoogleTest (without main() function) +Version: 1.10.0 +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgtest -lpthread +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 -lpthread +``` + +Notice that the sysroot is not included in `libdir` and `includedir`! If you try +to run `pkg-config` with the correct +`PKG_CONFIG_LIBDIR=/home/MYUSER/sysroot/usr/lib64/pkgconfig` against this `.pc` +file, you will get + +``` +$ pkg-config --cflags gtest +-DGTEST_HAS_PTHREAD=1 -lpthread -I/usr/include +$ pkg-config --libs gtest +-L/usr/lib64 -lgtest -lpthread +``` + +which is obviously wrong and points to the `CBUILD` and not `CHOST` root. In +order to use this in a cross-compilation setting, we need to tell pkg-config to +inject the actual sysroot into `-I` and `-L` variables. Let us now tell +pkg-config about the actual sysroot + +``` +export PKG_CONFIG_DIR= +export PKG_CONFIG_SYSROOT_DIR=/home/MYUSER/sysroot +export PKG_CONFIG_LIBDIR=${PKG_CONFIG_SYSROOT_DIR}/usr/lib64/pkgconfig +``` + +and running `pkg-config` again we get + +``` +$ pkg-config --cflags gtest +-DGTEST_HAS_PTHREAD=1 -lpthread -I/home/MYUSER/sysroot/usr/include +$ pkg-config --libs gtest +-L/home/MYUSER/sysroot/usr/lib64 -lgtest -lpthread +``` + +which contains the correct sysroot now. For a more comprehensive guide to also +including `${CHOST}` in build system calls, see the excellent tutorial by Diego +Elio Pettenò: diff --git a/_codeql_build_dir/_deps/googletest-src/docs/platforms.md b/_codeql_build_dir/_deps/googletest-src/docs/platforms.md new file mode 100644 index 0000000..eba6ef8 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/platforms.md @@ -0,0 +1,35 @@ +# Supported Platforms + +GoogleTest requires a codebase and compiler compliant with the C++11 standard or +newer. + +The GoogleTest code is officially supported on the following platforms. +Operating systems or tools not listed below are community-supported. For +community-supported platforms, patches that do not complicate the code may be +considered. + +If you notice any problems on your platform, please file an issue on the +[GoogleTest GitHub Issue Tracker](https://github.com/google/googletest/issues). +Pull requests containing fixes are welcome! + +### Operating systems + +* Linux +* macOS +* Windows + +### Compilers + +* gcc 5.0+ +* clang 5.0+ +* MSVC 2015+ + +**macOS users:** Xcode 9.3+ provides clang 5.0+. + +### Build systems + +* [Bazel](https://bazel.build/) +* [CMake](https://cmake.org/) + +Bazel is the build system used by the team internally and in tests. CMake is +supported on a best-effort basis and by the community. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/primer.md b/_codeql_build_dir/_deps/googletest-src/docs/primer.md new file mode 100644 index 0000000..6d8fdf4 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/primer.md @@ -0,0 +1,482 @@ +# Googletest Primer + +## Introduction: Why googletest? + +*googletest* helps you write better C++ tests. + +googletest is a testing framework developed by the Testing Technology team with +Google's specific requirements and constraints in mind. Whether you work on +Linux, Windows, or a Mac, if you write C++ code, googletest can help you. And it +supports *any* kind of tests, not just unit tests. + +So what makes a good test, and how does googletest fit in? We believe: + +1. Tests should be *independent* and *repeatable*. It's a pain to debug a test + that succeeds or fails as a result of other tests. googletest isolates the + tests by running each of them on a different object. When a test fails, + googletest allows you to run it in isolation for quick debugging. +2. Tests should be well *organized* and reflect the structure of the tested + code. googletest groups related tests into test suites that can share data + and subroutines. This common pattern is easy to recognize and makes tests + easy to maintain. Such consistency is especially helpful when people switch + projects and start to work on a new code base. +3. Tests should be *portable* and *reusable*. Google has a lot of code that is + platform-neutral; its tests should also be platform-neutral. googletest + works on different OSes, with different compilers, with or without + exceptions, so googletest tests can work with a variety of configurations. +4. When tests fail, they should provide as much *information* about the problem + as possible. googletest doesn't stop at the first test failure. Instead, it + only stops the current test and continues with the next. You can also set up + tests that report non-fatal failures after which the current test continues. + Thus, you can detect and fix multiple bugs in a single run-edit-compile + cycle. +5. The testing framework should liberate test writers from housekeeping chores + and let them focus on the test *content*. googletest automatically keeps + track of all tests defined, and doesn't require the user to enumerate them + in order to run them. +6. Tests should be *fast*. With googletest, you can reuse shared resources + across tests and pay for the set-up/tear-down only once, without making + tests depend on each other. + +Since googletest is based on the popular xUnit architecture, you'll feel right +at home if you've used JUnit or PyUnit before. If not, it will take you about 10 +minutes to learn the basics and get started. So let's go! + +## Beware of the nomenclature + +{: .callout .note} +_Note:_ There might be some confusion arising from different definitions of the +terms _Test_, _Test Case_ and _Test Suite_, so beware of misunderstanding these. + +Historically, googletest started to use the term _Test Case_ for grouping +related tests, whereas current publications, including International Software +Testing Qualifications Board ([ISTQB](http://www.istqb.org/)) materials and +various textbooks on software quality, use the term +_[Test Suite][istqb test suite]_ for this. + +The related term _Test_, as it is used in googletest, corresponds to the term +_[Test Case][istqb test case]_ of ISTQB and others. + +The term _Test_ is commonly of broad enough sense, including ISTQB's definition +of _Test Case_, so it's not much of a problem here. But the term _Test Case_ as +was used in Google Test is of contradictory sense and thus confusing. + +googletest recently started replacing the term _Test Case_ with _Test Suite_. +The preferred API is *TestSuite*. The older TestCase API is being slowly +deprecated and refactored away. + +So please be aware of the different definitions of the terms: + + +Meaning | googletest Term | [ISTQB](http://www.istqb.org/) Term +:----------------------------------------------------------------------------------- | :---------------------- | :---------------------------------- +Exercise a particular program path with specific input values and verify the results | [TEST()](#simple-tests) | [Test Case][istqb test case] + + +[istqb test case]: http://glossary.istqb.org/en/search/test%20case +[istqb test suite]: http://glossary.istqb.org/en/search/test%20suite + +## Basic Concepts + +When using googletest, you start by writing *assertions*, which are statements +that check whether a condition is true. An assertion's result can be *success*, +*nonfatal failure*, or *fatal failure*. If a fatal failure occurs, it aborts the +current function; otherwise the program continues normally. + +*Tests* use assertions to verify the tested code's behavior. If a test crashes +or has a failed assertion, then it *fails*; otherwise it *succeeds*. + +A *test suite* contains one or many tests. You should group your tests into test +suites that reflect the structure of the tested code. When multiple tests in a +test suite need to share common objects and subroutines, you can put them into a +*test fixture* class. + +A *test program* can contain multiple test suites. + +We'll now explain how to write a test program, starting at the individual +assertion level and building up to tests and test suites. + +## Assertions + +googletest assertions are macros that resemble function calls. You test a class +or function by making assertions about its behavior. When an assertion fails, +googletest prints the assertion's source file and line number location, along +with a failure message. You may also supply a custom failure message which will +be appended to googletest's message. + +The assertions come in pairs that test the same thing but have different effects +on the current function. `ASSERT_*` versions generate fatal failures when they +fail, and **abort the current function**. `EXPECT_*` versions generate nonfatal +failures, which don't abort the current function. Usually `EXPECT_*` are +preferred, as they allow more than one failure to be reported in a test. +However, you should use `ASSERT_*` if it doesn't make sense to continue when the +assertion in question fails. + +Since a failed `ASSERT_*` returns from the current function immediately, +possibly skipping clean-up code that comes after it, it may cause a space leak. +Depending on the nature of the leak, it may or may not be worth fixing - so keep +this in mind if you get a heap checker error in addition to assertion errors. + +To provide a custom failure message, simply stream it into the macro using the +`<<` operator or a sequence of such operators. See the following example, using +the [`ASSERT_EQ` and `EXPECT_EQ`](reference/assertions.md#EXPECT_EQ) macros to +verify value equality: + +```c++ +ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length"; + +for (int i = 0; i < x.size(); ++i) { + EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i; +} +``` + +Anything that can be streamed to an `ostream` can be streamed to an assertion +macro--in particular, C strings and `string` objects. If a wide string +(`wchar_t*`, `TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is +streamed to an assertion, it will be translated to UTF-8 when printed. + +GoogleTest provides a collection of assertions for verifying the behavior of +your code in various ways. You can check Boolean conditions, compare values +based on relational operators, verify string values, floating-point values, and +much more. There are even assertions that enable you to verify more complex +states by providing custom predicates. For the complete list of assertions +provided by GoogleTest, see the [Assertions Reference](reference/assertions.md). + +## Simple Tests + +To create a test: + +1. Use the `TEST()` macro to define and name a test function. These are + ordinary C++ functions that don't return a value. +2. In this function, along with any valid C++ statements you want to include, + use the various googletest assertions to check values. +3. The test's result is determined by the assertions; if any assertion in the + test fails (either fatally or non-fatally), or if the test crashes, the + entire test fails. Otherwise, it succeeds. + +```c++ +TEST(TestSuiteName, TestName) { + ... test body ... +} +``` + +`TEST()` arguments go from general to specific. The *first* argument is the name +of the test suite, and the *second* argument is the test's name within the test +suite. Both names must be valid C++ identifiers, and they should not contain +any underscores (`_`). A test's *full name* consists of its containing test suite and +its individual name. Tests from different test suites can have the same +individual name. + +For example, let's take a simple integer function: + +```c++ +int Factorial(int n); // Returns the factorial of n +``` + +A test suite for this function might look like: + +```c++ +// Tests factorial of 0. +TEST(FactorialTest, HandlesZeroInput) { + EXPECT_EQ(Factorial(0), 1); +} + +// Tests factorial of positive numbers. +TEST(FactorialTest, HandlesPositiveInput) { + EXPECT_EQ(Factorial(1), 1); + EXPECT_EQ(Factorial(2), 2); + EXPECT_EQ(Factorial(3), 6); + EXPECT_EQ(Factorial(8), 40320); +} +``` + +googletest groups the test results by test suites, so logically related tests +should be in the same test suite; in other words, the first argument to their +`TEST()` should be the same. In the above example, we have two tests, +`HandlesZeroInput` and `HandlesPositiveInput`, that belong to the same test +suite `FactorialTest`. + +When naming your test suites and tests, you should follow the same convention as +for +[naming functions and classes](https://google.github.io/styleguide/cppguide.html#Function_Names). + +**Availability**: Linux, Windows, Mac. + +## Test Fixtures: Using the Same Data Configuration for Multiple Tests {#same-data-multiple-tests} + +If you find yourself writing two or more tests that operate on similar data, you +can use a *test fixture*. This allows you to reuse the same configuration of +objects for several different tests. + +To create a fixture: + +1. Derive a class from `::testing::Test` . Start its body with `protected:`, as + we'll want to access fixture members from sub-classes. +2. Inside the class, declare any objects you plan to use. +3. If necessary, write a default constructor or `SetUp()` function to prepare + the objects for each test. A common mistake is to spell `SetUp()` as + **`Setup()`** with a small `u` - Use `override` in C++11 to make sure you + spelled it correctly. +4. If necessary, write a destructor or `TearDown()` function to release any + resources you allocated in `SetUp()` . To learn when you should use the + constructor/destructor and when you should use `SetUp()/TearDown()`, read + the [FAQ](faq.md#CtorVsSetUp). +5. If needed, define subroutines for your tests to share. + +When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to +access objects and subroutines in the test fixture: + +```c++ +TEST_F(TestFixtureName, TestName) { + ... test body ... +} +``` + +Like `TEST()`, the first argument is the test suite name, but for `TEST_F()` +this must be the name of the test fixture class. You've probably guessed: `_F` +is for fixture. + +Unfortunately, the C++ macro system does not allow us to create a single macro +that can handle both types of tests. Using the wrong macro causes a compiler +error. + +Also, you must first define a test fixture class before using it in a +`TEST_F()`, or you'll get the compiler error "`virtual outside class +declaration`". + +For each test defined with `TEST_F()`, googletest will create a *fresh* test +fixture at runtime, immediately initialize it via `SetUp()`, run the test, +clean up by calling `TearDown()`, and then delete the test fixture. Note that +different tests in the same test suite have different test fixture objects, and +googletest always deletes a test fixture before it creates the next one. +googletest does **not** reuse the same test fixture for multiple tests. Any +changes one test makes to the fixture do not affect other tests. + +As an example, let's write tests for a FIFO queue class named `Queue`, which has +the following interface: + +```c++ +template // E is the element type. +class Queue { + public: + Queue(); + void Enqueue(const E& element); + E* Dequeue(); // Returns NULL if the queue is empty. + size_t size() const; + ... +}; +``` + +First, define a fixture class. By convention, you should give it the name +`FooTest` where `Foo` is the class being tested. + +```c++ +class QueueTest : public ::testing::Test { + protected: + void SetUp() override { + q1_.Enqueue(1); + q2_.Enqueue(2); + q2_.Enqueue(3); + } + + // void TearDown() override {} + + Queue q0_; + Queue q1_; + Queue q2_; +}; +``` + +In this case, `TearDown()` is not needed since we don't have to clean up after +each test, other than what's already done by the destructor. + +Now we'll write tests using `TEST_F()` and this fixture. + +```c++ +TEST_F(QueueTest, IsEmptyInitially) { + EXPECT_EQ(q0_.size(), 0); +} + +TEST_F(QueueTest, DequeueWorks) { + int* n = q0_.Dequeue(); + EXPECT_EQ(n, nullptr); + + n = q1_.Dequeue(); + ASSERT_NE(n, nullptr); + EXPECT_EQ(*n, 1); + EXPECT_EQ(q1_.size(), 0); + delete n; + + n = q2_.Dequeue(); + ASSERT_NE(n, nullptr); + EXPECT_EQ(*n, 2); + EXPECT_EQ(q2_.size(), 1); + delete n; +} +``` + +The above uses both `ASSERT_*` and `EXPECT_*` assertions. The rule of thumb is +to use `EXPECT_*` when you want the test to continue to reveal more errors after +the assertion failure, and use `ASSERT_*` when continuing after failure doesn't +make sense. For example, the second assertion in the `Dequeue` test is +`ASSERT_NE(n, nullptr)`, as we need to dereference the pointer `n` later, which +would lead to a segfault when `n` is `NULL`. + +When these tests run, the following happens: + +1. googletest constructs a `QueueTest` object (let's call it `t1`). +2. `t1.SetUp()` initializes `t1`. +3. The first test (`IsEmptyInitially`) runs on `t1`. +4. `t1.TearDown()` cleans up after the test finishes. +5. `t1` is destructed. +6. The above steps are repeated on another `QueueTest` object, this time + running the `DequeueWorks` test. + +**Availability**: Linux, Windows, Mac. + +## Invoking the Tests + +`TEST()` and `TEST_F()` implicitly register their tests with googletest. So, +unlike with many other C++ testing frameworks, you don't have to re-list all +your defined tests in order to run them. + +After defining your tests, you can run them with `RUN_ALL_TESTS()`, which +returns `0` if all the tests are successful, or `1` otherwise. Note that +`RUN_ALL_TESTS()` runs *all tests* in your link unit--they can be from +different test suites, or even different source files. + +When invoked, the `RUN_ALL_TESTS()` macro: + +* Saves the state of all googletest flags. + +* Creates a test fixture object for the first test. + +* Initializes it via `SetUp()`. + +* Runs the test on the fixture object. + +* Cleans up the fixture via `TearDown()`. + +* Deletes the fixture. + +* Restores the state of all googletest flags. + +* Repeats the above steps for the next test, until all tests have run. + +If a fatal failure happens the subsequent steps will be skipped. + +{: .callout .important} +> IMPORTANT: You must **not** ignore the return value of `RUN_ALL_TESTS()`, or +> you will get a compiler error. The rationale for this design is that the +> automated testing service determines whether a test has passed based on its +> exit code, not on its stdout/stderr output; thus your `main()` function must +> return the value of `RUN_ALL_TESTS()`. +> +> Also, you should call `RUN_ALL_TESTS()` only **once**. Calling it more than +> once conflicts with some advanced googletest features (e.g., thread-safe +> [death tests](advanced.md#death-tests)) and thus is not supported. + +**Availability**: Linux, Windows, Mac. + +## Writing the main() Function + +Most users should _not_ need to write their own `main` function and instead link +with `gtest_main` (as opposed to with `gtest`), which defines a suitable entry +point. See the end of this section for details. The remainder of this section +should only apply when you need to do something custom before the tests run that +cannot be expressed within the framework of fixtures and test suites. + +If you write your own `main` function, it should return the value of +`RUN_ALL_TESTS()`. + +You can start from this boilerplate: + +```c++ +#include "this/package/foo.h" + +#include "gtest/gtest.h" + +namespace my { +namespace project { +namespace { + +// The fixture for testing class Foo. +class FooTest : public ::testing::Test { + protected: + // You can remove any or all of the following functions if their bodies would + // be empty. + + FooTest() { + // You can do set-up work for each test here. + } + + ~FooTest() override { + // You can do clean-up work that doesn't throw exceptions here. + } + + // If the constructor and destructor are not enough for setting up + // and cleaning up each test, you can define the following methods: + + void SetUp() override { + // Code here will be called immediately after the constructor (right + // before each test). + } + + void TearDown() override { + // Code here will be called immediately after each test (right + // before the destructor). + } + + // Class members declared here can be used by all tests in the test suite + // for Foo. +}; + +// Tests that the Foo::Bar() method does Abc. +TEST_F(FooTest, MethodBarDoesAbc) { + const std::string input_filepath = "this/package/testdata/myinputfile.dat"; + const std::string output_filepath = "this/package/testdata/myoutputfile.dat"; + Foo f; + EXPECT_EQ(f.Bar(input_filepath, output_filepath), 0); +} + +// Tests that Foo does Xyz. +TEST_F(FooTest, DoesXyz) { + // Exercises the Xyz feature of Foo. +} + +} // namespace +} // namespace project +} // namespace my + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} +``` + +The `::testing::InitGoogleTest()` function parses the command line for +googletest flags, and removes all recognized flags. This allows the user to +control a test program's behavior via various flags, which we'll cover in +the [AdvancedGuide](advanced.md). You **must** call this function before calling +`RUN_ALL_TESTS()`, or the flags won't be properly initialized. + +On Windows, `InitGoogleTest()` also works with wide strings, so it can be used +in programs compiled in `UNICODE` mode as well. + +But maybe you think that writing all those `main` functions is too much work? We +agree with you completely, and that's why Google Test provides a basic +implementation of main(). If it fits your needs, then just link your test with +the `gtest_main` library and you are good to go. + +{: .callout .note} +NOTE: `ParseGUnitFlags()` is deprecated in favor of `InitGoogleTest()`. + +## Known Limitations + +* Google Test is designed to be thread-safe. The implementation is thread-safe + on systems where the `pthreads` library is available. It is currently + _unsafe_ to use Google Test assertions from two threads concurrently on + other systems (e.g. Windows). In most tests this is not an issue as usually + the assertions are done in the main thread. If you want to help, you can + volunteer to implement the necessary synchronization primitives in + `gtest-port.h` for your platform. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/quickstart-bazel.md b/_codeql_build_dir/_deps/googletest-src/docs/quickstart-bazel.md new file mode 100644 index 0000000..362ee6d --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/quickstart-bazel.md @@ -0,0 +1,161 @@ +# Quickstart: Building with Bazel + +This tutorial aims to get you up and running with GoogleTest using the Bazel +build system. If you're using GoogleTest for the first time or need a refresher, +we recommend this tutorial as a starting point. + +## Prerequisites + +To complete this tutorial, you'll need: + +* A compatible operating system (e.g. Linux, macOS, Windows). +* A compatible C++ compiler that supports at least C++11. +* [Bazel](https://bazel.build/), the preferred build system used by the + GoogleTest team. + +See [Supported Platforms](platforms.md) for more information about platforms +compatible with GoogleTest. + +If you don't already have Bazel installed, see the +[Bazel installation guide](https://docs.bazel.build/versions/master/install.html). + +{: .callout .note} +Note: The terminal commands in this tutorial show a Unix shell prompt, but the +commands work on the Windows command line as well. + +## Set up a Bazel workspace + +A +[Bazel workspace](https://docs.bazel.build/versions/master/build-ref.html#workspace) +is a directory on your filesystem that you use to manage source files for the +software you want to build. Each workspace directory has a text file named +`WORKSPACE` which may be empty, or may contain references to external +dependencies required to build the outputs. + +First, create a directory for your workspace: + +``` +$ mkdir my_workspace && cd my_workspace +``` + +Next, you’ll create the `WORKSPACE` file to specify dependencies. A common and +recommended way to depend on GoogleTest is to use a +[Bazel external dependency](https://docs.bazel.build/versions/master/external.html) +via the +[`http_archive` rule](https://docs.bazel.build/versions/master/repo/http.html#http_archive). +To do this, in the root directory of your workspace (`my_workspace/`), create a +file named `WORKSPACE` with the following contents: + +``` +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "com_google_googletest", + urls = ["https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip"], + strip_prefix = "googletest-609281088cfefc76f9d0ce82e1ff6c30cc3591e5", +) +``` + +The above configuration declares a dependency on GoogleTest which is downloaded +as a ZIP archive from GitHub. In the above example, +`609281088cfefc76f9d0ce82e1ff6c30cc3591e5` is the Git commit hash of the +GoogleTest version to use; we recommend updating the hash often to point to the +latest version. + +Bazel also needs a dependency on the +[`rules_cc` repository](https://github.com/bazelbuild/rules_cc) to build C++ +code, so add the following to the `WORKSPACE` file: + +``` +http_archive( + name = "rules_cc", + urls = ["https://github.com/bazelbuild/rules_cc/archive/40548a2974f1aea06215272d9c2b47a14a24e556.zip"], + strip_prefix = "rules_cc-40548a2974f1aea06215272d9c2b47a14a24e556", +) +``` + +Now you're ready to build C++ code that uses GoogleTest. + +## Create and run a binary + +With your Bazel workspace set up, you can now use GoogleTest code within your +own project. + +As an example, create a file named `hello_test.cc` in your `my_workspace` +directory with the following contents: + +```cpp +#include + +// Demonstrate some basic assertions. +TEST(HelloTest, BasicAssertions) { + // Expect two strings not to be equal. + EXPECT_STRNE("hello", "world"); + // Expect equality. + EXPECT_EQ(7 * 6, 42); +} +``` + +GoogleTest provides [assertions](primer.md#assertions) that you use to test the +behavior of your code. The above sample includes the main GoogleTest header file +and demonstrates some basic assertions. + +To build the code, create a file named `BUILD` in the same directory with the +following contents: + +``` +load("@rules_cc//cc:defs.bzl", "cc_test") + +cc_test( + name = "hello_test", + size = "small", + srcs = ["hello_test.cc"], + deps = ["@com_google_googletest//:gtest_main"], +) +``` + +This `cc_test` rule declares the C++ test binary you want to build, and links to +GoogleTest (`//:gtest_main`) using the prefix you specified in the `WORKSPACE` +file (`@com_google_googletest`). For more information about Bazel `BUILD` files, +see the +[Bazel C++ Tutorial](https://docs.bazel.build/versions/master/tutorial/cpp.html). + +Now you can build and run your test: + +
+my_workspace$ bazel test --test_output=all //:hello_test
+INFO: Analyzed target //:hello_test (26 packages loaded, 362 targets configured).
+INFO: Found 1 test target...
+INFO: From Testing //:hello_test:
+==================== Test output for //:hello_test:
+Running main() from gmock_main.cc
+[==========] Running 1 test from 1 test suite.
+[----------] Global test environment set-up.
+[----------] 1 test from HelloTest
+[ RUN      ] HelloTest.BasicAssertions
+[       OK ] HelloTest.BasicAssertions (0 ms)
+[----------] 1 test from HelloTest (0 ms total)
+
+[----------] Global test environment tear-down
+[==========] 1 test from 1 test suite ran. (0 ms total)
+[  PASSED  ] 1 test.
+================================================================================
+Target //:hello_test up-to-date:
+  bazel-bin/hello_test
+INFO: Elapsed time: 4.190s, Critical Path: 3.05s
+INFO: 27 processes: 8 internal, 19 linux-sandbox.
+INFO: Build completed successfully, 27 total actions
+//:hello_test                                                     PASSED in 0.1s
+
+INFO: Build completed successfully, 27 total actions
+
+ +Congratulations! You've successfully built and run a test binary using +GoogleTest. + +## Next steps + +* [Check out the Primer](primer.md) to start learning how to write simple + tests. +* [See the code samples](samples.md) for more examples showing how to use a + variety of GoogleTest features. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/quickstart-cmake.md b/_codeql_build_dir/_deps/googletest-src/docs/quickstart-cmake.md new file mode 100644 index 0000000..420f1d3 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/quickstart-cmake.md @@ -0,0 +1,156 @@ +# Quickstart: Building with CMake + +This tutorial aims to get you up and running with GoogleTest using CMake. If +you're using GoogleTest for the first time or need a refresher, we recommend +this tutorial as a starting point. If your project uses Bazel, see the +[Quickstart for Bazel](quickstart-bazel.md) instead. + +## Prerequisites + +To complete this tutorial, you'll need: + +* A compatible operating system (e.g. Linux, macOS, Windows). +* A compatible C++ compiler that supports at least C++11. +* [CMake](https://cmake.org/) and a compatible build tool for building the + project. + * Compatible build tools include + [Make](https://www.gnu.org/software/make/), + [Ninja](https://ninja-build.org/), and others - see + [CMake Generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html) + for more information. + +See [Supported Platforms](platforms.md) for more information about platforms +compatible with GoogleTest. + +If you don't already have CMake installed, see the +[CMake installation guide](https://cmake.org/install). + +{: .callout .note} +Note: The terminal commands in this tutorial show a Unix shell prompt, but the +commands work on the Windows command line as well. + +## Set up a project + +CMake uses a file named `CMakeLists.txt` to configure the build system for a +project. You'll use this file to set up your project and declare a dependency on +GoogleTest. + +First, create a directory for your project: + +``` +$ mkdir my_project && cd my_project +``` + +Next, you'll create the `CMakeLists.txt` file and declare a dependency on +GoogleTest. There are many ways to express dependencies in the CMake ecosystem; +in this quickstart, you'll use the +[`FetchContent` CMake module](https://cmake.org/cmake/help/latest/module/FetchContent.html). +To do this, in your project directory (`my_project`), create a file named +`CMakeLists.txt` with the following contents: + +```cmake +cmake_minimum_required(VERSION 3.14) +project(my_project) + +# GoogleTest requires at least C++11 +set(CMAKE_CXX_STANDARD 11) + +include(FetchContent) +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip +) +# For Windows: Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) +``` + +The above configuration declares a dependency on GoogleTest which is downloaded +from GitHub. In the above example, `609281088cfefc76f9d0ce82e1ff6c30cc3591e5` is +the Git commit hash of the GoogleTest version to use; we recommend updating the +hash often to point to the latest version. + +For more information about how to create `CMakeLists.txt` files, see the +[CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html). + +## Create and run a binary + +With GoogleTest declared as a dependency, you can use GoogleTest code within +your own project. + +As an example, create a file named `hello_test.cc` in your `my_project` +directory with the following contents: + +```cpp +#include + +// Demonstrate some basic assertions. +TEST(HelloTest, BasicAssertions) { + // Expect two strings not to be equal. + EXPECT_STRNE("hello", "world"); + // Expect equality. + EXPECT_EQ(7 * 6, 42); +} +``` + +GoogleTest provides [assertions](primer.md#assertions) that you use to test the +behavior of your code. The above sample includes the main GoogleTest header file +and demonstrates some basic assertions. + +To build the code, add the following to the end of your `CMakeLists.txt` file: + +```cmake +enable_testing() + +add_executable( + hello_test + hello_test.cc +) +target_link_libraries( + hello_test + gtest_main +) + +include(GoogleTest) +gtest_discover_tests(hello_test) +``` + +The above configuration enables testing in CMake, declares the C++ test binary +you want to build (`hello_test`), and links it to GoogleTest (`gtest_main`). The +last two lines enable CMake's test runner to discover the tests included in the +binary, using the +[`GoogleTest` CMake module](https://cmake.org/cmake/help/git-stage/module/GoogleTest.html). + +Now you can build and run your test: + +
+my_project$ cmake -S . -B build
+-- The C compiler identification is GNU 10.2.1
+-- The CXX compiler identification is GNU 10.2.1
+...
+-- Build files have been written to: .../my_project/build
+
+my_project$ cmake --build build
+Scanning dependencies of target gtest
+...
+[100%] Built target gmock_main
+
+my_project$ cd build && ctest
+Test project .../my_project/build
+    Start 1: HelloTest.BasicAssertions
+1/1 Test #1: HelloTest.BasicAssertions ........   Passed    0.00 sec
+
+100% tests passed, 0 tests failed out of 1
+
+Total Test time (real) =   0.01 sec
+
+ +Congratulations! You've successfully built and run a test binary using +GoogleTest. + +## Next steps + +* [Check out the Primer](primer.md) to start learning how to write simple + tests. +* [See the code samples](samples.md) for more examples showing how to use a + variety of GoogleTest features. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/reference/actions.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/actions.md new file mode 100644 index 0000000..166d2a8 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/reference/actions.md @@ -0,0 +1,115 @@ +# Actions Reference + +[**Actions**](../gmock_for_dummies.md#actions-what-should-it-do) specify what a +mock function should do when invoked. This page lists the built-in actions +provided by GoogleTest. All actions are defined in the `::testing` namespace. + +## Returning a Value + +| | | +| :-------------------------------- | :-------------------------------------------- | +| `Return()` | Return from a `void` mock function. | +| `Return(value)` | Return `value`. If the type of `value` is different to the mock function's return type, `value` is converted to the latter type at the time the expectation is set, not when the action is executed. | +| `ReturnArg()` | Return the `N`-th (0-based) argument. | +| `ReturnNew(a1, ..., ak)` | Return `new T(a1, ..., ak)`; a different object is created each time. | +| `ReturnNull()` | Return a null pointer. | +| `ReturnPointee(ptr)` | Return the value pointed to by `ptr`. | +| `ReturnRef(variable)` | Return a reference to `variable`. | +| `ReturnRefOfCopy(value)` | Return a reference to a copy of `value`; the copy lives as long as the action. | +| `ReturnRoundRobin({a1, ..., ak})` | Each call will return the next `ai` in the list, starting at the beginning when the end of the list is reached. | + +## Side Effects + +| | | +| :--------------------------------- | :-------------------------------------- | +| `Assign(&variable, value)` | Assign `value` to variable. | +| `DeleteArg()` | Delete the `N`-th (0-based) argument, which must be a pointer. | +| `SaveArg(pointer)` | Save the `N`-th (0-based) argument to `*pointer`. | +| `SaveArgPointee(pointer)` | Save the value pointed to by the `N`-th (0-based) argument to `*pointer`. | +| `SetArgReferee(value)` | Assign `value` to the variable referenced by the `N`-th (0-based) argument. | +| `SetArgPointee(value)` | Assign `value` to the variable pointed by the `N`-th (0-based) argument. | +| `SetArgumentPointee(value)` | Same as `SetArgPointee(value)`. Deprecated. Will be removed in v1.7.0. | +| `SetArrayArgument(first, last)` | Copies the elements in source range [`first`, `last`) to the array pointed to by the `N`-th (0-based) argument, which can be either a pointer or an iterator. The action does not take ownership of the elements in the source range. | +| `SetErrnoAndReturn(error, value)` | Set `errno` to `error` and return `value`. | +| `Throw(exception)` | Throws the given exception, which can be any copyable value. Available since v1.1.0. | + +## Using a Function, Functor, or Lambda as an Action + +In the following, by "callable" we mean a free function, `std::function`, +functor, or lambda. + +| | | +| :---------------------------------- | :------------------------------------- | +| `f` | Invoke f with the arguments passed to the mock function, where f is a callable. | +| `Invoke(f)` | Invoke `f` with the arguments passed to the mock function, where `f` can be a global/static function or a functor. | +| `Invoke(object_pointer, &class::method)` | Invoke the method on the object with the arguments passed to the mock function. | +| `InvokeWithoutArgs(f)` | Invoke `f`, which can be a global/static function or a functor. `f` must take no arguments. | +| `InvokeWithoutArgs(object_pointer, &class::method)` | Invoke the method on the object, which takes no arguments. | +| `InvokeArgument(arg1, arg2, ..., argk)` | Invoke the mock function's `N`-th (0-based) argument, which must be a function or a functor, with the `k` arguments. | + +The return value of the invoked function is used as the return value of the +action. + +When defining a callable to be used with `Invoke*()`, you can declare any unused +parameters as `Unused`: + +```cpp +using ::testing::Invoke; +double Distance(Unused, double x, double y) { return sqrt(x*x + y*y); } +... +EXPECT_CALL(mock, Foo("Hi", _, _)).WillOnce(Invoke(Distance)); +``` + +`Invoke(callback)` and `InvokeWithoutArgs(callback)` take ownership of +`callback`, which must be permanent. The type of `callback` must be a base +callback type instead of a derived one, e.g. + +```cpp + BlockingClosure* done = new BlockingClosure; + ... Invoke(done) ...; // This won't compile! + + Closure* done2 = new BlockingClosure; + ... Invoke(done2) ...; // This works. +``` + +In `InvokeArgument(...)`, if an argument needs to be passed by reference, +wrap it inside `std::ref()`. For example, + +```cpp +using ::testing::InvokeArgument; +... +InvokeArgument<2>(5, string("Hi"), std::ref(foo)) +``` + +calls the mock function's #2 argument, passing to it `5` and `string("Hi")` by +value, and `foo` by reference. + +## Default Action + +| Matcher | Description | +| :------------ | :----------------------------------------------------- | +| `DoDefault()` | Do the default action (specified by `ON_CALL()` or the built-in one). | + +{: .callout .note} +**Note:** due to technical reasons, `DoDefault()` cannot be used inside a +composite action - trying to do so will result in a run-time error. + +## Composite Actions + +| | | +| :----------------------------- | :------------------------------------------ | +| `DoAll(a1, a2, ..., an)` | Do all actions `a1` to `an` and return the result of `an` in each invocation. The first `n - 1` sub-actions must return void and will receive a readonly view of the arguments. | +| `IgnoreResult(a)` | Perform action `a` and ignore its result. `a` must not return void. | +| `WithArg(a)` | Pass the `N`-th (0-based) argument of the mock function to action `a` and perform it. | +| `WithArgs(a)` | Pass the selected (0-based) arguments of the mock function to action `a` and perform it. | +| `WithoutArgs(a)` | Perform action `a` without any arguments. | + +## Defining Actions + +| | | +| :--------------------------------- | :-------------------------------------- | +| `ACTION(Sum) { return arg0 + arg1; }` | Defines an action `Sum()` to return the sum of the mock function's argument #0 and #1. | +| `ACTION_P(Plus, n) { return arg0 + n; }` | Defines an action `Plus(n)` to return the sum of the mock function's argument #0 and `n`. | +| `ACTION_Pk(Foo, p1, ..., pk) { statements; }` | Defines a parameterized action `Foo(p1, ..., pk)` to execute the given `statements`. | + +The `ACTION*` macros cannot be used inside a function or class. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/reference/assertions.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/assertions.md new file mode 100644 index 0000000..7bf03a3 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/reference/assertions.md @@ -0,0 +1,633 @@ +# Assertions Reference + +This page lists the assertion macros provided by GoogleTest for verifying code +behavior. To use them, include the header `gtest/gtest.h`. + +The majority of the macros listed below come as a pair with an `EXPECT_` variant +and an `ASSERT_` variant. Upon failure, `EXPECT_` macros generate nonfatal +failures and allow the current function to continue running, while `ASSERT_` +macros generate fatal failures and abort the current function. + +All assertion macros support streaming a custom failure message into them with +the `<<` operator, for example: + +```cpp +EXPECT_TRUE(my_condition) << "My condition is not true"; +``` + +Anything that can be streamed to an `ostream` can be streamed to an assertion +macro—in particular, C strings and string objects. If a wide string (`wchar_t*`, +`TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is streamed to an +assertion, it will be translated to UTF-8 when printed. + +## Explicit Success and Failure {#success-failure} + +The assertions in this section generate a success or failure directly instead of +testing a value or expression. These are useful when control flow, rather than a +Boolean expression, determines the test's success or failure, as shown by the +following example: + +```c++ +switch(expression) { + case 1: + ... some checks ... + case 2: + ... some other checks ... + default: + FAIL() << "We shouldn't get here."; +} +``` + +### SUCCEED {#SUCCEED} + +`SUCCEED()` + +Generates a success. This *does not* make the overall test succeed. A test is +considered successful only if none of its assertions fail during its execution. + +The `SUCCEED` assertion is purely documentary and currently doesn't generate any +user-visible output. However, we may add `SUCCEED` messages to GoogleTest output +in the future. + +### FAIL {#FAIL} + +`FAIL()` + +Generates a fatal failure, which returns from the current function. + +Can only be used in functions that return `void`. See +[Assertion Placement](../advanced.md#assertion-placement) for more information. + +### ADD_FAILURE {#ADD_FAILURE} + +`ADD_FAILURE()` + +Generates a nonfatal failure, which allows the current function to continue +running. + +### ADD_FAILURE_AT {#ADD_FAILURE_AT} + +`ADD_FAILURE_AT(`*`file_path`*`,`*`line_number`*`)` + +Generates a nonfatal failure at the file and line number specified. + +## Generalized Assertion {#generalized} + +The following assertion allows [matchers](matchers.md) to be used to verify +values. + +### EXPECT_THAT {#EXPECT_THAT} + +`EXPECT_THAT(`*`value`*`,`*`matcher`*`)` \ +`ASSERT_THAT(`*`value`*`,`*`matcher`*`)` + +Verifies that *`value`* matches the [matcher](matchers.md) *`matcher`*. + +For example, the following code verifies that the string `value1` starts with +`"Hello"`, `value2` matches a regular expression, and `value3` is between 5 and +10: + +```cpp +#include "gmock/gmock.h" + +using ::testing::AllOf; +using ::testing::Gt; +using ::testing::Lt; +using ::testing::MatchesRegex; +using ::testing::StartsWith; + +... +EXPECT_THAT(value1, StartsWith("Hello")); +EXPECT_THAT(value2, MatchesRegex("Line \\d+")); +ASSERT_THAT(value3, AllOf(Gt(5), Lt(10))); +``` + +Matchers enable assertions of this form to read like English and generate +informative failure messages. For example, if the above assertion on `value1` +fails, the resulting message will be similar to the following: + +``` +Value of: value1 + Actual: "Hi, world!" +Expected: starts with "Hello" +``` + +GoogleTest provides a built-in library of matchers—see the +[Matchers Reference](matchers.md). It is also possible to write your own +matchers—see [Writing New Matchers Quickly](../gmock_cook_book.md#NewMatchers). +The use of matchers makes `EXPECT_THAT` a powerful, extensible assertion. + +*The idea for this assertion was borrowed from Joe Walnes' Hamcrest project, +which adds `assertThat()` to JUnit.* + +## Boolean Conditions {#boolean} + +The following assertions test Boolean conditions. + +### EXPECT_TRUE {#EXPECT_TRUE} + +`EXPECT_TRUE(`*`condition`*`)` \ +`ASSERT_TRUE(`*`condition`*`)` + +Verifies that *`condition`* is true. + +### EXPECT_FALSE {#EXPECT_FALSE} + +`EXPECT_FALSE(`*`condition`*`)` \ +`ASSERT_FALSE(`*`condition`*`)` + +Verifies that *`condition`* is false. + +## Binary Comparison {#binary-comparison} + +The following assertions compare two values. The value arguments must be +comparable by the assertion's comparison operator, otherwise a compiler error +will result. + +If an argument supports the `<<` operator, it will be called to print the +argument when the assertion fails. Otherwise, GoogleTest will attempt to print +them in the best way it can—see +[Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values). + +Arguments are always evaluated exactly once, so it's OK for the arguments to +have side effects. However, the argument evaluation order is undefined and +programs should not depend on any particular argument evaluation order. + +These assertions work with both narrow and wide string objects (`string` and +`wstring`). + +See also the [Floating-Point Comparison](#floating-point) assertions to compare +floating-point numbers and avoid problems caused by rounding. + +### EXPECT_EQ {#EXPECT_EQ} + +`EXPECT_EQ(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_EQ(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`==`*`val2`*. + +Does pointer equality on pointers. If used on two C strings, it tests if they +are in the same memory location, not if they have the same value. Use +[`EXPECT_STREQ`](#EXPECT_STREQ) to compare C strings (e.g. `const char*`) by +value. + +When comparing a pointer to `NULL`, use `EXPECT_EQ(`*`ptr`*`, nullptr)` instead +of `EXPECT_EQ(`*`ptr`*`, NULL)`. + +### EXPECT_NE {#EXPECT_NE} + +`EXPECT_NE(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_NE(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`!=`*`val2`*. + +Does pointer equality on pointers. If used on two C strings, it tests if they +are in different memory locations, not if they have different values. Use +[`EXPECT_STRNE`](#EXPECT_STRNE) to compare C strings (e.g. `const char*`) by +value. + +When comparing a pointer to `NULL`, use `EXPECT_NE(`*`ptr`*`, nullptr)` instead +of `EXPECT_NE(`*`ptr`*`, NULL)`. + +### EXPECT_LT {#EXPECT_LT} + +`EXPECT_LT(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_LT(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`<`*`val2`*. + +### EXPECT_LE {#EXPECT_LE} + +`EXPECT_LE(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_LE(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`<=`*`val2`*. + +### EXPECT_GT {#EXPECT_GT} + +`EXPECT_GT(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_GT(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`>`*`val2`*. + +### EXPECT_GE {#EXPECT_GE} + +`EXPECT_GE(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_GE(`*`val1`*`,`*`val2`*`)` + +Verifies that *`val1`*`>=`*`val2`*. + +## String Comparison {#c-strings} + +The following assertions compare two **C strings**. To compare two `string` +objects, use [`EXPECT_EQ`](#EXPECT_EQ) or [`EXPECT_NE`](#EXPECT_NE) instead. + +These assertions also accept wide C strings (`wchar_t*`). If a comparison of two +wide strings fails, their values will be printed as UTF-8 narrow strings. + +To compare a C string with `NULL`, use `EXPECT_EQ(`*`c_string`*`, nullptr)` or +`EXPECT_NE(`*`c_string`*`, nullptr)`. + +### EXPECT_STREQ {#EXPECT_STREQ} + +`EXPECT_STREQ(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STREQ(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have the same contents. + +### EXPECT_STRNE {#EXPECT_STRNE} + +`EXPECT_STRNE(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STRNE(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have different contents. + +### EXPECT_STRCASEEQ {#EXPECT_STRCASEEQ} + +`EXPECT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have the same contents, +ignoring case. + +### EXPECT_STRCASENE {#EXPECT_STRCASENE} + +`EXPECT_STRCASENE(`*`str1`*`,`*`str2`*`)` \ +`ASSERT_STRCASENE(`*`str1`*`,`*`str2`*`)` + +Verifies that the two C strings *`str1`* and *`str2`* have different contents, +ignoring case. + +## Floating-Point Comparison {#floating-point} + +The following assertions compare two floating-point values. + +Due to rounding errors, it is very unlikely that two floating-point values will +match exactly, so `EXPECT_EQ` is not suitable. In general, for floating-point +comparison to make sense, the user needs to carefully choose the error bound. + +GoogleTest also provides assertions that use a default error bound based on +Units in the Last Place (ULPs). To learn more about ULPs, see the article +[Comparing Floating Point Numbers](https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/). + +### EXPECT_FLOAT_EQ {#EXPECT_FLOAT_EQ} + +`EXPECT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` + +Verifies that the two `float` values *`val1`* and *`val2`* are approximately +equal, to within 4 ULPs from each other. + +### EXPECT_DOUBLE_EQ {#EXPECT_DOUBLE_EQ} + +`EXPECT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` \ +`ASSERT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` + +Verifies that the two `double` values *`val1`* and *`val2`* are approximately +equal, to within 4 ULPs from each other. + +### EXPECT_NEAR {#EXPECT_NEAR} + +`EXPECT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` \ +`ASSERT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` + +Verifies that the difference between *`val1`* and *`val2`* does not exceed the +absolute error bound *`abs_error`*. + +## Exception Assertions {#exceptions} + +The following assertions verify that a piece of code throws, or does not throw, +an exception. Usage requires exceptions to be enabled in the build environment. + +Note that the piece of code under test can be a compound statement, for example: + +```cpp +EXPECT_NO_THROW({ + int n = 5; + DoSomething(&n); +}); +``` + +### EXPECT_THROW {#EXPECT_THROW} + +`EXPECT_THROW(`*`statement`*`,`*`exception_type`*`)` \ +`ASSERT_THROW(`*`statement`*`,`*`exception_type`*`)` + +Verifies that *`statement`* throws an exception of type *`exception_type`*. + +### EXPECT_ANY_THROW {#EXPECT_ANY_THROW} + +`EXPECT_ANY_THROW(`*`statement`*`)` \ +`ASSERT_ANY_THROW(`*`statement`*`)` + +Verifies that *`statement`* throws an exception of any type. + +### EXPECT_NO_THROW {#EXPECT_NO_THROW} + +`EXPECT_NO_THROW(`*`statement`*`)` \ +`ASSERT_NO_THROW(`*`statement`*`)` + +Verifies that *`statement`* does not throw any exception. + +## Predicate Assertions {#predicates} + +The following assertions enable more complex predicates to be verified while +printing a more clear failure message than if `EXPECT_TRUE` were used alone. + +### EXPECT_PRED* {#EXPECT_PRED} + +`EXPECT_PRED1(`*`pred`*`,`*`val1`*`)` \ +`EXPECT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ +`EXPECT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`EXPECT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ +`EXPECT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +`ASSERT_PRED1(`*`pred`*`,`*`val1`*`)` \ +`ASSERT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ +`ASSERT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`ASSERT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ +`ASSERT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +Verifies that the predicate *`pred`* returns `true` when passed the given values +as arguments. + +The parameter *`pred`* is a function or functor that accepts as many arguments +as the corresponding macro accepts values. If *`pred`* returns `true` for the +given arguments, the assertion succeeds, otherwise the assertion fails. + +When the assertion fails, it prints the value of each argument. Arguments are +always evaluated exactly once. + +As an example, see the following code: + +```cpp +// Returns true if m and n have no common divisors except 1. +bool MutuallyPrime(int m, int n) { ... } +... +const int a = 3; +const int b = 4; +const int c = 10; +... +EXPECT_PRED2(MutuallyPrime, a, b); // Succeeds +EXPECT_PRED2(MutuallyPrime, b, c); // Fails +``` + +In the above example, the first assertion succeeds, and the second fails with +the following message: + +``` +MutuallyPrime(b, c) is false, where +b is 4 +c is 10 +``` + +Note that if the given predicate is an overloaded function or a function +template, the assertion macro might not be able to determine which version to +use, and it might be necessary to explicitly specify the type of the function. +For example, for a Boolean function `IsPositive()` overloaded to take either a +single `int` or `double` argument, it would be necessary to write one of the +following: + +```cpp +EXPECT_PRED1(static_cast(IsPositive), 5); +EXPECT_PRED1(static_cast(IsPositive), 3.14); +``` + +Writing simply `EXPECT_PRED1(IsPositive, 5);` would result in a compiler error. +Similarly, to use a template function, specify the template arguments: + +```cpp +template +bool IsNegative(T x) { + return x < 0; +} +... +EXPECT_PRED1(IsNegative, -5); // Must specify type for IsNegative +``` + +If a template has multiple parameters, wrap the predicate in parentheses so the +macro arguments are parsed correctly: + +```cpp +ASSERT_PRED2((MyPredicate), 5, 0); +``` + +### EXPECT_PRED_FORMAT* {#EXPECT_PRED_FORMAT} + +`EXPECT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ +`EXPECT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ +`EXPECT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`EXPECT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` +\ +`EXPECT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +`ASSERT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ +`ASSERT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ +`ASSERT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ +`ASSERT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` +\ +`ASSERT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` + +Verifies that the predicate *`pred_formatter`* succeeds when passed the given +values as arguments. + +The parameter *`pred_formatter`* is a *predicate-formatter*, which is a function +or functor with the signature: + +```cpp +testing::AssertionResult PredicateFormatter(const char* expr1, + const char* expr2, + ... + const char* exprn, + T1 val1, + T2 val2, + ... + Tn valn); +``` + +where *`val1`*, *`val2`*, ..., *`valn`* are the values of the predicate +arguments, and *`expr1`*, *`expr2`*, ..., *`exprn`* are the corresponding +expressions as they appear in the source code. The types `T1`, `T2`, ..., `Tn` +can be either value types or reference types; if an argument has type `T`, it +can be declared as either `T` or `const T&`, whichever is appropriate. For more +about the return type `testing::AssertionResult`, see +[Using a Function That Returns an AssertionResult](../advanced.md#using-a-function-that-returns-an-assertionresult). + +As an example, see the following code: + +```cpp +// Returns the smallest prime common divisor of m and n, +// or 1 when m and n are mutually prime. +int SmallestPrimeCommonDivisor(int m, int n) { ... } + +// Returns true if m and n have no common divisors except 1. +bool MutuallyPrime(int m, int n) { ... } + +// A predicate-formatter for asserting that two integers are mutually prime. +testing::AssertionResult AssertMutuallyPrime(const char* m_expr, + const char* n_expr, + int m, + int n) { + if (MutuallyPrime(m, n)) return testing::AssertionSuccess(); + + return testing::AssertionFailure() << m_expr << " and " << n_expr + << " (" << m << " and " << n << ") are not mutually prime, " + << "as they have a common divisor " << SmallestPrimeCommonDivisor(m, n); +} + +... +const int a = 3; +const int b = 4; +const int c = 10; +... +EXPECT_PRED_FORMAT2(AssertMutuallyPrime, a, b); // Succeeds +EXPECT_PRED_FORMAT2(AssertMutuallyPrime, b, c); // Fails +``` + +In the above example, the final assertion fails and the predicate-formatter +produces the following failure message: + +``` +b and c (4 and 10) are not mutually prime, as they have a common divisor 2 +``` + +## Windows HRESULT Assertions {#HRESULT} + +The following assertions test for `HRESULT` success or failure. For example: + +```cpp +CComPtr shell; +ASSERT_HRESULT_SUCCEEDED(shell.CoCreateInstance(L"Shell.Application")); +CComVariant empty; +ASSERT_HRESULT_SUCCEEDED(shell->ShellExecute(CComBSTR(url), empty, empty, empty, empty)); +``` + +The generated output contains the human-readable error message associated with +the returned `HRESULT` code. + +### EXPECT_HRESULT_SUCCEEDED {#EXPECT_HRESULT_SUCCEEDED} + +`EXPECT_HRESULT_SUCCEEDED(`*`expression`*`)` \ +`ASSERT_HRESULT_SUCCEEDED(`*`expression`*`)` + +Verifies that *`expression`* is a success `HRESULT`. + +### EXPECT_HRESULT_FAILED {#EXPECT_HRESULT_FAILED} + +`EXPECT_HRESULT_FAILED(`*`expression`*`)` \ +`EXPECT_HRESULT_FAILED(`*`expression`*`)` + +Verifies that *`expression`* is a failure `HRESULT`. + +## Death Assertions {#death} + +The following assertions verify that a piece of code causes the process to +terminate. For context, see [Death Tests](../advanced.md#death-tests). + +These assertions spawn a new process and execute the code under test in that +process. How that happens depends on the platform and the variable +`::testing::GTEST_FLAG(death_test_style)`, which is initialized from the +command-line flag `--gtest_death_test_style`. + +* On POSIX systems, `fork()` (or `clone()` on Linux) is used to spawn the + child, after which: + * If the variable's value is `"fast"`, the death test statement is + immediately executed. + * If the variable's value is `"threadsafe"`, the child process re-executes + the unit test binary just as it was originally invoked, but with some + extra flags to cause just the single death test under consideration to + be run. +* On Windows, the child is spawned using the `CreateProcess()` API, and + re-executes the binary to cause just the single death test under + consideration to be run - much like the `"threadsafe"` mode on POSIX. + +Other values for the variable are illegal and will cause the death test to fail. +Currently, the flag's default value is +**`"fast"`**. + +If the death test statement runs to completion without dying, the child process +will nonetheless terminate, and the assertion fails. + +Note that the piece of code under test can be a compound statement, for example: + +```cpp +EXPECT_DEATH({ + int n = 5; + DoSomething(&n); +}, "Error on line .* of DoSomething()"); +``` + +### EXPECT_DEATH {#EXPECT_DEATH} + +`EXPECT_DEATH(`*`statement`*`,`*`matcher`*`)` \ +`ASSERT_DEATH(`*`statement`*`,`*`matcher`*`)` + +Verifies that *`statement`* causes the process to terminate with a nonzero exit +status and produces `stderr` output that matches *`matcher`*. + +The parameter *`matcher`* is either a [matcher](matchers.md) for a `const +std::string&`, or a regular expression (see +[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare +string *`s`* (with no matcher) is treated as +[`ContainsRegex(s)`](matchers.md#string-matchers), **not** +[`Eq(s)`](matchers.md#generic-comparison). + +For example, the following code verifies that calling `DoSomething(42)` causes +the process to die with an error message that contains the text `My error`: + +```cpp +EXPECT_DEATH(DoSomething(42), "My error"); +``` + +### EXPECT_DEATH_IF_SUPPORTED {#EXPECT_DEATH_IF_SUPPORTED} + +`EXPECT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` \ +`ASSERT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` + +If death tests are supported, behaves the same as +[`EXPECT_DEATH`](#EXPECT_DEATH). Otherwise, verifies nothing. + +### EXPECT_DEBUG_DEATH {#EXPECT_DEBUG_DEATH} + +`EXPECT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` \ +`ASSERT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` + +In debug mode, behaves the same as [`EXPECT_DEATH`](#EXPECT_DEATH). When not in +debug mode (i.e. `NDEBUG` is defined), just executes *`statement`*. + +### EXPECT_EXIT {#EXPECT_EXIT} + +`EXPECT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` \ +`ASSERT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` + +Verifies that *`statement`* causes the process to terminate with an exit status +that satisfies *`predicate`*, and produces `stderr` output that matches +*`matcher`*. + +The parameter *`predicate`* is a function or functor that accepts an `int` exit +status and returns a `bool`. GoogleTest provides two predicates to handle common +cases: + +```cpp +// Returns true if the program exited normally with the given exit status code. +::testing::ExitedWithCode(exit_code); + +// Returns true if the program was killed by the given signal. +// Not available on Windows. +::testing::KilledBySignal(signal_number); +``` + +The parameter *`matcher`* is either a [matcher](matchers.md) for a `const +std::string&`, or a regular expression (see +[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare +string *`s`* (with no matcher) is treated as +[`ContainsRegex(s)`](matchers.md#string-matchers), **not** +[`Eq(s)`](matchers.md#generic-comparison). + +For example, the following code verifies that calling `NormalExit()` causes the +process to print a message containing the text `Success` to `stderr` and exit +with exit status code 0: + +```cpp +EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success"); +``` diff --git a/_codeql_build_dir/_deps/googletest-src/docs/reference/matchers.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/matchers.md new file mode 100644 index 0000000..9e40cab --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/reference/matchers.md @@ -0,0 +1,283 @@ +# Matchers Reference + +A **matcher** matches a *single* argument. You can use it inside `ON_CALL()` or +`EXPECT_CALL()`, or use it to validate a value directly using two macros: + +| Macro | Description | +| :----------------------------------- | :------------------------------------ | +| `EXPECT_THAT(actual_value, matcher)` | Asserts that `actual_value` matches `matcher`. | +| `ASSERT_THAT(actual_value, matcher)` | The same as `EXPECT_THAT(actual_value, matcher)`, except that it generates a **fatal** failure. | + +{: .callout .note} +**Note:** Although equality matching via `EXPECT_THAT(actual_value, +expected_value)` is supported, prefer to make the comparison explicit via +`EXPECT_THAT(actual_value, Eq(expected_value))` or `EXPECT_EQ(actual_value, +expected_value)`. + +Built-in matchers (where `argument` is the function argument, e.g. +`actual_value` in the example above, or when used in the context of +`EXPECT_CALL(mock_object, method(matchers))`, the arguments of `method`) are +divided into several categories. All matchers are defined in the `::testing` +namespace unless otherwise noted. + +## Wildcard + +Matcher | Description +:-------------------------- | :----------------------------------------------- +`_` | `argument` can be any value of the correct type. +`A()` or `An()` | `argument` can be any value of type `type`. + +## Generic Comparison + +| Matcher | Description | +| :--------------------- | :-------------------------------------------------- | +| `Eq(value)` or `value` | `argument == value` | +| `Ge(value)` | `argument >= value` | +| `Gt(value)` | `argument > value` | +| `Le(value)` | `argument <= value` | +| `Lt(value)` | `argument < value` | +| `Ne(value)` | `argument != value` | +| `IsFalse()` | `argument` evaluates to `false` in a Boolean context. | +| `IsTrue()` | `argument` evaluates to `true` in a Boolean context. | +| `IsNull()` | `argument` is a `NULL` pointer (raw or smart). | +| `NotNull()` | `argument` is a non-null pointer (raw or smart). | +| `Optional(m)` | `argument` is `optional<>` that contains a value matching `m`. (For testing whether an `optional<>` is set, check for equality with `nullopt`. You may need to use `Eq(nullopt)` if the inner type doesn't have `==`.)| +| `VariantWith(m)` | `argument` is `variant<>` that holds the alternative of type T with a value matching `m`. | +| `Ref(variable)` | `argument` is a reference to `variable`. | +| `TypedEq(value)` | `argument` has type `type` and is equal to `value`. You may need to use this instead of `Eq(value)` when the mock function is overloaded. | + +Except `Ref()`, these matchers make a *copy* of `value` in case it's modified or +destructed later. If the compiler complains that `value` doesn't have a public +copy constructor, try wrap it in `std::ref()`, e.g. +`Eq(std::ref(non_copyable_value))`. If you do that, make sure +`non_copyable_value` is not changed afterwards, or the meaning of your matcher +will be changed. + +`IsTrue` and `IsFalse` are useful when you need to use a matcher, or for types +that can be explicitly converted to Boolean, but are not implicitly converted to +Boolean. In other cases, you can use the basic +[`EXPECT_TRUE` and `EXPECT_FALSE`](assertions.md#boolean) assertions. + +## Floating-Point Matchers {#FpMatchers} + +| Matcher | Description | +| :------------------------------- | :--------------------------------- | +| `DoubleEq(a_double)` | `argument` is a `double` value approximately equal to `a_double`, treating two NaNs as unequal. | +| `FloatEq(a_float)` | `argument` is a `float` value approximately equal to `a_float`, treating two NaNs as unequal. | +| `NanSensitiveDoubleEq(a_double)` | `argument` is a `double` value approximately equal to `a_double`, treating two NaNs as equal. | +| `NanSensitiveFloatEq(a_float)` | `argument` is a `float` value approximately equal to `a_float`, treating two NaNs as equal. | +| `IsNan()` | `argument` is any floating-point type with a NaN value. | + +The above matchers use ULP-based comparison (the same as used in googletest). +They automatically pick a reasonable error bound based on the absolute value of +the expected value. `DoubleEq()` and `FloatEq()` conform to the IEEE standard, +which requires comparing two NaNs for equality to return false. The +`NanSensitive*` version instead treats two NaNs as equal, which is often what a +user wants. + +| Matcher | Description | +| :------------------------------------------------ | :----------------------- | +| `DoubleNear(a_double, max_abs_error)` | `argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as unequal. | +| `FloatNear(a_float, max_abs_error)` | `argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as unequal. | +| `NanSensitiveDoubleNear(a_double, max_abs_error)` | `argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as equal. | +| `NanSensitiveFloatNear(a_float, max_abs_error)` | `argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as equal. | + +## String Matchers + +The `argument` can be either a C string or a C++ string object: + +| Matcher | Description | +| :---------------------- | :------------------------------------------------- | +| `ContainsRegex(string)` | `argument` matches the given regular expression. | +| `EndsWith(suffix)` | `argument` ends with string `suffix`. | +| `HasSubstr(string)` | `argument` contains `string` as a sub-string. | +| `IsEmpty()` | `argument` is an empty string. | +| `MatchesRegex(string)` | `argument` matches the given regular expression with the match starting at the first character and ending at the last character. | +| `StartsWith(prefix)` | `argument` starts with string `prefix`. | +| `StrCaseEq(string)` | `argument` is equal to `string`, ignoring case. | +| `StrCaseNe(string)` | `argument` is not equal to `string`, ignoring case. | +| `StrEq(string)` | `argument` is equal to `string`. | +| `StrNe(string)` | `argument` is not equal to `string`. | + +`ContainsRegex()` and `MatchesRegex()` take ownership of the `RE` object. They +use the regular expression syntax defined +[here](../advanced.md#regular-expression-syntax). All of these matchers, except +`ContainsRegex()` and `MatchesRegex()` work for wide strings as well. + +## Container Matchers + +Most STL-style containers support `==`, so you can use `Eq(expected_container)` +or simply `expected_container` to match a container exactly. If you want to +write the elements in-line, match them more flexibly, or get more informative +messages, you can use: + +| Matcher | Description | +| :---------------------------------------- | :------------------------------- | +| `BeginEndDistanceIs(m)` | `argument` is a container whose `begin()` and `end()` iterators are separated by a number of increments matching `m`. E.g. `BeginEndDistanceIs(2)` or `BeginEndDistanceIs(Lt(2))`. For containers that define a `size()` method, `SizeIs(m)` may be more efficient. | +| `ContainerEq(container)` | The same as `Eq(container)` except that the failure message also includes which elements are in one container but not the other. | +| `Contains(e)` | `argument` contains an element that matches `e`, which can be either a value or a matcher. | +| `Each(e)` | `argument` is a container where *every* element matches `e`, which can be either a value or a matcher. | +| `ElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, where the *i*-th element matches `ei`, which can be a value or a matcher. | +| `ElementsAreArray({e0, e1, ..., en})`, `ElementsAreArray(a_container)`, `ElementsAreArray(begin, end)`, `ElementsAreArray(array)`, or `ElementsAreArray(array, count)` | The same as `ElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `IsEmpty()` | `argument` is an empty container (`container.empty()`). | +| `IsSubsetOf({e0, e1, ..., en})`, `IsSubsetOf(a_container)`, `IsSubsetOf(begin, end)`, `IsSubsetOf(array)`, or `IsSubsetOf(array, count)` | `argument` matches `UnorderedElementsAre(x0, x1, ..., xk)` for some subset `{x0, x1, ..., xk}` of the expected matchers. | +| `IsSupersetOf({e0, e1, ..., en})`, `IsSupersetOf(a_container)`, `IsSupersetOf(begin, end)`, `IsSupersetOf(array)`, or `IsSupersetOf(array, count)` | Some subset of `argument` matches `UnorderedElementsAre(`expected matchers`)`. | +| `Pointwise(m, container)`, `Pointwise(m, {e0, e1, ..., en})` | `argument` contains the same number of elements as in `container`, and for all i, (the i-th element in `argument`, the i-th element in `container`) match `m`, which is a matcher on 2-tuples. E.g. `Pointwise(Le(), upper_bounds)` verifies that each element in `argument` doesn't exceed the corresponding element in `upper_bounds`. See more detail below. | +| `SizeIs(m)` | `argument` is a container whose size matches `m`. E.g. `SizeIs(2)` or `SizeIs(Lt(2))`. | +| `UnorderedElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, and under *some* permutation of the elements, each element matches an `ei` (for a different `i`), which can be a value or a matcher. | +| `UnorderedElementsAreArray({e0, e1, ..., en})`, `UnorderedElementsAreArray(a_container)`, `UnorderedElementsAreArray(begin, end)`, `UnorderedElementsAreArray(array)`, or `UnorderedElementsAreArray(array, count)` | The same as `UnorderedElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `UnorderedPointwise(m, container)`, `UnorderedPointwise(m, {e0, e1, ..., en})` | Like `Pointwise(m, container)`, but ignores the order of elements. | +| `WhenSorted(m)` | When `argument` is sorted using the `<` operator, it matches container matcher `m`. E.g. `WhenSorted(ElementsAre(1, 2, 3))` verifies that `argument` contains elements 1, 2, and 3, ignoring order. | +| `WhenSortedBy(comparator, m)` | The same as `WhenSorted(m)`, except that the given comparator instead of `<` is used to sort `argument`. E.g. `WhenSortedBy(std::greater(), ElementsAre(3, 2, 1))`. | + +**Notes:** + +* These matchers can also match: + 1. a native array passed by reference (e.g. in `Foo(const int (&a)[5])`), + and + 2. an array passed as a pointer and a count (e.g. in `Bar(const T* buffer, + int len)` -- see [Multi-argument Matchers](#MultiArgMatchers)). +* The array being matched may be multi-dimensional (i.e. its elements can be + arrays). +* `m` in `Pointwise(m, ...)` and `UnorderedPointwise(m, ...)` should be a + matcher for `::std::tuple` where `T` and `U` are the element type of + the actual container and the expected container, respectively. For example, + to compare two `Foo` containers where `Foo` doesn't support `operator==`, + one might write: + + ```cpp + using ::std::get; + MATCHER(FooEq, "") { + return std::get<0>(arg).Equals(std::get<1>(arg)); + } + ... + EXPECT_THAT(actual_foos, Pointwise(FooEq(), expected_foos)); + ``` + +## Member Matchers + +| Matcher | Description | +| :------------------------------ | :----------------------------------------- | +| `Field(&class::field, m)` | `argument.field` (or `argument->field` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_. | +| `Field(field_name, &class::field, m)` | The same as the two-parameter version, but provides a better error message. | +| `Key(e)` | `argument.first` matches `e`, which can be either a value or a matcher. E.g. `Contains(Key(Le(5)))` can verify that a `map` contains a key `<= 5`. | +| `Pair(m1, m2)` | `argument` is an `std::pair` whose `first` field matches `m1` and `second` field matches `m2`. | +| `FieldsAre(m...)` | `argument` is a compatible object where each field matches piecewise with the matchers `m...`. A compatible object is any that supports the `std::tuple_size`+`get(obj)` protocol. In C++17 and up this also supports types compatible with structured bindings, like aggregates. | +| `Property(&class::property, m)` | `argument.property()` (or `argument->property()` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_. The method `property()` must take no argument and be declared as `const`. | +| `Property(property_name, &class::property, m)` | The same as the two-parameter version, but provides a better error message. + +**Notes:** + +* You can use `FieldsAre()` to match any type that supports structured + bindings, such as `std::tuple`, `std::pair`, `std::array`, and aggregate + types. For example: + + ```cpp + std::tuple my_tuple{7, "hello world"}; + EXPECT_THAT(my_tuple, FieldsAre(Ge(0), HasSubstr("hello"))); + + struct MyStruct { + int value = 42; + std::string greeting = "aloha"; + }; + MyStruct s; + EXPECT_THAT(s, FieldsAre(42, "aloha")); + ``` + +* Don't use `Property()` against member functions that you do not own, because + taking addresses of functions is fragile and generally not part of the + contract of the function. + +## Matching the Result of a Function, Functor, or Callback + +| Matcher | Description | +| :--------------- | :------------------------------------------------ | +| `ResultOf(f, m)` | `f(argument)` matches matcher `m`, where `f` is a function or functor. | + +## Pointer Matchers + +| Matcher | Description | +| :------------------------ | :---------------------------------------------- | +| `Address(m)` | the result of `std::addressof(argument)` matches `m`. | +| `Pointee(m)` | `argument` (either a smart pointer or a raw pointer) points to a value that matches matcher `m`. | +| `Pointer(m)` | `argument` (either a smart pointer or a raw pointer) contains a pointer that matches `m`. `m` will match against the raw pointer regardless of the type of `argument`. | +| `WhenDynamicCastTo(m)` | when `argument` is passed through `dynamic_cast()`, it matches matcher `m`. | + +## Multi-argument Matchers {#MultiArgMatchers} + +Technically, all matchers match a *single* value. A "multi-argument" matcher is +just one that matches a *tuple*. The following matchers can be used to match a +tuple `(x, y)`: + +Matcher | Description +:------ | :---------- +`Eq()` | `x == y` +`Ge()` | `x >= y` +`Gt()` | `x > y` +`Le()` | `x <= y` +`Lt()` | `x < y` +`Ne()` | `x != y` + +You can use the following selectors to pick a subset of the arguments (or +reorder them) to participate in the matching: + +| Matcher | Description | +| :------------------------- | :---------------------------------------------- | +| `AllArgs(m)` | Equivalent to `m`. Useful as syntactic sugar in `.With(AllArgs(m))`. | +| `Args(m)` | The tuple of the `k` selected (using 0-based indices) arguments matches `m`, e.g. `Args<1, 2>(Eq())`. | + +## Composite Matchers + +You can make a matcher from one or more other matchers: + +| Matcher | Description | +| :------------------------------- | :-------------------------------------- | +| `AllOf(m1, m2, ..., mn)` | `argument` matches all of the matchers `m1` to `mn`. | +| `AllOfArray({m0, m1, ..., mn})`, `AllOfArray(a_container)`, `AllOfArray(begin, end)`, `AllOfArray(array)`, or `AllOfArray(array, count)` | The same as `AllOf()` except that the matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `AnyOf(m1, m2, ..., mn)` | `argument` matches at least one of the matchers `m1` to `mn`. | +| `AnyOfArray({m0, m1, ..., mn})`, `AnyOfArray(a_container)`, `AnyOfArray(begin, end)`, `AnyOfArray(array)`, or `AnyOfArray(array, count)` | The same as `AnyOf()` except that the matchers come from an initializer list, STL-style container, iterator range, or C-style array. | +| `Not(m)` | `argument` doesn't match matcher `m`. | + +## Adapters for Matchers + +| Matcher | Description | +| :---------------------- | :------------------------------------ | +| `MatcherCast(m)` | casts matcher `m` to type `Matcher`. | +| `SafeMatcherCast(m)` | [safely casts](../gmock_cook_book.md#SafeMatcherCast) matcher `m` to type `Matcher`. | +| `Truly(predicate)` | `predicate(argument)` returns something considered by C++ to be true, where `predicate` is a function or functor. | + +`AddressSatisfies(callback)` and `Truly(callback)` take ownership of `callback`, +which must be a permanent callback. + +## Using Matchers as Predicates {#MatchersAsPredicatesCheat} + +| Matcher | Description | +| :---------------------------- | :------------------------------------------ | +| `Matches(m)(value)` | evaluates to `true` if `value` matches `m`. You can use `Matches(m)` alone as a unary functor. | +| `ExplainMatchResult(m, value, result_listener)` | evaluates to `true` if `value` matches `m`, explaining the result to `result_listener`. | +| `Value(value, m)` | evaluates to `true` if `value` matches `m`. | + +## Defining Matchers + +| Matcher | Description | +| :----------------------------------- | :------------------------------------ | +| `MATCHER(IsEven, "") { return (arg % 2) == 0; }` | Defines a matcher `IsEven()` to match an even number. | +| `MATCHER_P(IsDivisibleBy, n, "") { *result_listener << "where the remainder is " << (arg % n); return (arg % n) == 0; }` | Defines a matcher `IsDivisibleBy(n)` to match a number divisible by `n`. | +| `MATCHER_P2(IsBetween, a, b, absl::StrCat(negation ? "isn't" : "is", " between ", PrintToString(a), " and ", PrintToString(b))) { return a <= arg && arg <= b; }` | Defines a matcher `IsBetween(a, b)` to match a value in the range [`a`, `b`]. | + +**Notes:** + +1. The `MATCHER*` macros cannot be used inside a function or class. +2. The matcher body must be *purely functional* (i.e. it cannot have any side + effect, and the result must not depend on anything other than the value + being matched and the matcher parameters). +3. You can use `PrintToString(x)` to convert a value `x` of any type to a + string. +4. You can use `ExplainMatchResult()` in a custom matcher to wrap another + matcher, for example: + + ```cpp + MATCHER_P(NestedPropertyMatches, matcher, "") { + return ExplainMatchResult(matcher, arg.nested().property(), result_listener); + } + ``` diff --git a/_codeql_build_dir/_deps/googletest-src/docs/reference/mocking.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/mocking.md new file mode 100644 index 0000000..c29f716 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/reference/mocking.md @@ -0,0 +1,587 @@ +# Mocking Reference + +This page lists the facilities provided by GoogleTest for creating and working +with mock objects. To use them, include the header +`gmock/gmock.h`. + +## Macros {#macros} + +GoogleTest defines the following macros for working with mocks. + +### MOCK_METHOD {#MOCK_METHOD} + +`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`));` \ +`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`), +(`*`specs...`*`));` + +Defines a mock method *`method_name`* with arguments `(`*`args...`*`)` and +return type *`return_type`* within a mock class. + +The parameters of `MOCK_METHOD` mirror the method declaration. The optional +fourth parameter *`specs...`* is a comma-separated list of qualifiers. The +following qualifiers are accepted: + +| Qualifier | Meaning | +| -------------------------- | -------------------------------------------- | +| `const` | Makes the mocked method a `const` method. Required if overriding a `const` method. | +| `override` | Marks the method with `override`. Recommended if overriding a `virtual` method. | +| `noexcept` | Marks the method with `noexcept`. Required if overriding a `noexcept` method. | +| `Calltype(`*`calltype`*`)` | Sets the call type for the method, for example `Calltype(STDMETHODCALLTYPE)`. Useful on Windows. | +| `ref(`*`qualifier`*`)` | Marks the method with the given reference qualifier, for example `ref(&)` or `ref(&&)`. Required if overriding a method that has a reference qualifier. | + +Note that commas in arguments prevent `MOCK_METHOD` from parsing the arguments +correctly if they are not appropriately surrounded by parentheses. See the +following example: + +```cpp +class MyMock { + public: + // The following 2 lines will not compile due to commas in the arguments: + MOCK_METHOD(std::pair, GetPair, ()); // Error! + MOCK_METHOD(bool, CheckMap, (std::map, bool)); // Error! + + // One solution - wrap arguments that contain commas in parentheses: + MOCK_METHOD((std::pair), GetPair, ()); + MOCK_METHOD(bool, CheckMap, ((std::map), bool)); + + // Another solution - use type aliases: + using BoolAndInt = std::pair; + MOCK_METHOD(BoolAndInt, GetPair, ()); + using MapIntDouble = std::map; + MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); +}; +``` + +`MOCK_METHOD` must be used in the `public:` section of a mock class definition, +regardless of whether the method being mocked is `public`, `protected`, or +`private` in the base class. + +### EXPECT_CALL {#EXPECT_CALL} + +`EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` + +Creates an [expectation](../gmock_for_dummies.md#setting-expectations) that the +method *`method_name`* of the object *`mock_object`* is called with arguments +that match the given matchers *`matchers...`*. `EXPECT_CALL` must precede any +code that exercises the mock object. + +The parameter *`matchers...`* is a comma-separated list of +[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that +correspond to each argument of the method *`method_name`*. The expectation will +apply only to calls of *`method_name`* whose arguments match all of the +matchers. If `(`*`matchers...`*`)` is omitted, the expectation behaves as if +each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). +See the [Matchers Reference](matchers.md) for a list of all built-in matchers. + +The following chainable clauses can be used to modify the expectation, and they +must be used in the following order: + +```cpp +EXPECT_CALL(mock_object, method_name(matchers...)) + .With(multi_argument_matcher) // Can be used at most once + .Times(cardinality) // Can be used at most once + .InSequence(sequences...) // Can be used any number of times + .After(expectations...) // Can be used any number of times + .WillOnce(action) // Can be used any number of times + .WillRepeatedly(action) // Can be used at most once + .RetiresOnSaturation(); // Can be used at most once +``` + +See details for each modifier clause below. + +#### With {#EXPECT_CALL.With} + +`.With(`*`multi_argument_matcher`*`)` + +Restricts the expectation to apply only to mock function calls whose arguments +as a whole match the multi-argument matcher *`multi_argument_matcher`*. + +GoogleTest passes all of the arguments as one tuple into the matcher. The +parameter *`multi_argument_matcher`* must thus be a matcher of type +`Matcher>`, where `A1, ..., An` are the types of the +function arguments. + +For example, the following code sets the expectation that +`my_mock.SetPosition()` is called with any two arguments, the first argument +being less than the second: + +```cpp +using ::testing::_; +using ::testing::Lt; +... +EXPECT_CALL(my_mock, SetPosition(_, _)) + .With(Lt()); +``` + +GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` +matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). + +The `With` clause can be used at most once on an expectation and must be the +first clause. + +#### Times {#EXPECT_CALL.Times} + +`.Times(`*`cardinality`*`)` + +Specifies how many times the mock function call is expected. + +The parameter *`cardinality`* represents the number of expected calls and can be +one of the following, all defined in the `::testing` namespace: + +| Cardinality | Meaning | +| ------------------- | --------------------------------------------------- | +| `AnyNumber()` | The function can be called any number of times. | +| `AtLeast(n)` | The function call is expected at least *n* times. | +| `AtMost(n)` | The function call is expected at most *n* times. | +| `Between(m, n)` | The function call is expected between *m* and *n* times, inclusive. | +| `Exactly(n)` or `n` | The function call is expected exactly *n* times. If *n* is 0, the call should never happen. | + +If the `Times` clause is omitted, GoogleTest infers the cardinality as follows: + +* If neither [`WillOnce`](#EXPECT_CALL.WillOnce) nor + [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) are specified, the inferred + cardinality is `Times(1)`. +* If there are *n* `WillOnce` clauses and no `WillRepeatedly` clause, where + *n* >= 1, the inferred cardinality is `Times(n)`. +* If there are *n* `WillOnce` clauses and one `WillRepeatedly` clause, where + *n* >= 0, the inferred cardinality is `Times(AtLeast(n))`. + +The `Times` clause can be used at most once on an expectation. + +#### InSequence {#EXPECT_CALL.InSequence} + +`.InSequence(`*`sequences...`*`)` + +Specifies that the mock function call is expected in a certain sequence. + +The parameter *`sequences...`* is any number of [`Sequence`](#Sequence) objects. +Expected calls assigned to the same sequence are expected to occur in the order +the expectations are declared. + +For example, the following code sets the expectation that the `Reset()` method +of `my_mock` is called before both `GetSize()` and `Describe()`, and `GetSize()` +and `Describe()` can occur in any order relative to each other: + +```cpp +using ::testing::Sequence; +Sequence s1, s2; +... +EXPECT_CALL(my_mock, Reset()) + .InSequence(s1, s2); +EXPECT_CALL(my_mock, GetSize()) + .InSequence(s1); +EXPECT_CALL(my_mock, Describe()) + .InSequence(s2); +``` + +The `InSequence` clause can be used any number of times on an expectation. + +See also the [`InSequence` class](#InSequence). + +#### After {#EXPECT_CALL.After} + +`.After(`*`expectations...`*`)` + +Specifies that the mock function call is expected to occur after one or more +other calls. + +The parameter *`expectations...`* can be up to five +[`Expectation`](#Expectation) or [`ExpectationSet`](#ExpectationSet) objects. +The mock function call is expected to occur after all of the given expectations. + +For example, the following code sets the expectation that the `Describe()` +method of `my_mock` is called only after both `InitX()` and `InitY()` have been +called. + +```cpp +using ::testing::Expectation; +... +Expectation init_x = EXPECT_CALL(my_mock, InitX()); +Expectation init_y = EXPECT_CALL(my_mock, InitY()); +EXPECT_CALL(my_mock, Describe()) + .After(init_x, init_y); +``` + +The `ExpectationSet` object is helpful when the number of prerequisites for an +expectation is large or variable, for example: + +```cpp +using ::testing::ExpectationSet; +... +ExpectationSet all_inits; +// Collect all expectations of InitElement() calls +for (int i = 0; i < element_count; i++) { + all_inits += EXPECT_CALL(my_mock, InitElement(i)); +} +EXPECT_CALL(my_mock, Describe()) + .After(all_inits); // Expect Describe() call after all InitElement() calls +``` + +The `After` clause can be used any number of times on an expectation. + +#### WillOnce {#EXPECT_CALL.WillOnce} + +`.WillOnce(`*`action`*`)` + +Specifies the mock function's actual behavior when invoked, for a single +matching function call. + +The parameter *`action`* represents the +[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function +call will perform. See the [Actions Reference](actions.md) for a list of +built-in actions. + +The use of `WillOnce` implicitly sets a cardinality on the expectation when +`Times` is not specified. See [`Times`](#EXPECT_CALL.Times). + +Each matching function call will perform the next action in the order declared. +For example, the following code specifies that `my_mock.GetNumber()` is expected +to be called exactly 3 times and will return `1`, `2`, and `3` respectively on +the first, second, and third calls: + +```cpp +using ::testing::Return; +... +EXPECT_CALL(my_mock, GetNumber()) + .WillOnce(Return(1)) + .WillOnce(Return(2)) + .WillOnce(Return(3)); +``` + +The `WillOnce` clause can be used any number of times on an expectation. + +#### WillRepeatedly {#EXPECT_CALL.WillRepeatedly} + +`.WillRepeatedly(`*`action`*`)` + +Specifies the mock function's actual behavior when invoked, for all subsequent +matching function calls. Takes effect after the actions specified in the +[`WillOnce`](#EXPECT_CALL.WillOnce) clauses, if any, have been performed. + +The parameter *`action`* represents the +[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function +call will perform. See the [Actions Reference](actions.md) for a list of +built-in actions. + +The use of `WillRepeatedly` implicitly sets a cardinality on the expectation +when `Times` is not specified. See [`Times`](#EXPECT_CALL.Times). + +If any `WillOnce` clauses have been specified, matching function calls will +perform those actions before the action specified by `WillRepeatedly`. See the +following example: + +```cpp +using ::testing::Return; +... +EXPECT_CALL(my_mock, GetName()) + .WillRepeatedly(Return("John Doe")); // Return "John Doe" on all calls + +EXPECT_CALL(my_mock, GetNumber()) + .WillOnce(Return(42)) // Return 42 on the first call + .WillRepeatedly(Return(7)); // Return 7 on all subsequent calls +``` + +The `WillRepeatedly` clause can be used at most once on an expectation. + +#### RetiresOnSaturation {#EXPECT_CALL.RetiresOnSaturation} + +`.RetiresOnSaturation()` + +Indicates that the expectation will no longer be active after the expected +number of matching function calls has been reached. + +The `RetiresOnSaturation` clause is only meaningful for expectations with an +upper-bounded cardinality. The expectation will *retire* (no longer match any +function calls) after it has been *saturated* (the upper bound has been +reached). See the following example: + +```cpp +using ::testing::_; +using ::testing::AnyNumber; +... +EXPECT_CALL(my_mock, SetNumber(_)) // Expectation 1 + .Times(AnyNumber()); +EXPECT_CALL(my_mock, SetNumber(7)) // Expectation 2 + .Times(2) + .RetiresOnSaturation(); +``` + +In the above example, the first two calls to `my_mock.SetNumber(7)` match +expectation 2, which then becomes inactive and no longer matches any calls. A +third call to `my_mock.SetNumber(7)` would then match expectation 1. Without +`RetiresOnSaturation()` on expectation 2, a third call to `my_mock.SetNumber(7)` +would match expectation 2 again, producing a failure since the limit of 2 calls +was exceeded. + +The `RetiresOnSaturation` clause can be used at most once on an expectation and +must be the last clause. + +### ON_CALL {#ON_CALL} + +`ON_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` + +Defines what happens when the method *`method_name`* of the object +*`mock_object`* is called with arguments that match the given matchers +*`matchers...`*. Requires a modifier clause to specify the method's behavior. +*Does not* set any expectations that the method will be called. + +The parameter *`matchers...`* is a comma-separated list of +[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that +correspond to each argument of the method *`method_name`*. The `ON_CALL` +specification will apply only to calls of *`method_name`* whose arguments match +all of the matchers. If `(`*`matchers...`*`)` is omitted, the behavior is as if +each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). +See the [Matchers Reference](matchers.md) for a list of all built-in matchers. + +The following chainable clauses can be used to set the method's behavior, and +they must be used in the following order: + +```cpp +ON_CALL(mock_object, method_name(matchers...)) + .With(multi_argument_matcher) // Can be used at most once + .WillByDefault(action); // Required +``` + +See details for each modifier clause below. + +#### With {#ON_CALL.With} + +`.With(`*`multi_argument_matcher`*`)` + +Restricts the specification to only mock function calls whose arguments as a +whole match the multi-argument matcher *`multi_argument_matcher`*. + +GoogleTest passes all of the arguments as one tuple into the matcher. The +parameter *`multi_argument_matcher`* must thus be a matcher of type +`Matcher>`, where `A1, ..., An` are the types of the +function arguments. + +For example, the following code sets the default behavior when +`my_mock.SetPosition()` is called with any two arguments, the first argument +being less than the second: + +```cpp +using ::testing::_; +using ::testing::Lt; +using ::testing::Return; +... +ON_CALL(my_mock, SetPosition(_, _)) + .With(Lt()) + .WillByDefault(Return(true)); +``` + +GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` +matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). + +The `With` clause can be used at most once with each `ON_CALL` statement. + +#### WillByDefault {#ON_CALL.WillByDefault} + +`.WillByDefault(`*`action`*`)` + +Specifies the default behavior of a matching mock function call. + +The parameter *`action`* represents the +[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function +call will perform. See the [Actions Reference](actions.md) for a list of +built-in actions. + +For example, the following code specifies that by default, a call to +`my_mock.Greet()` will return `"hello"`: + +```cpp +using ::testing::Return; +... +ON_CALL(my_mock, Greet()) + .WillByDefault(Return("hello")); +``` + +The action specified by `WillByDefault` is superseded by the actions specified +on a matching `EXPECT_CALL` statement, if any. See the +[`WillOnce`](#EXPECT_CALL.WillOnce) and +[`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) clauses of `EXPECT_CALL`. + +The `WillByDefault` clause must be used exactly once with each `ON_CALL` +statement. + +## Classes {#classes} + +GoogleTest defines the following classes for working with mocks. + +### DefaultValue {#DefaultValue} + +`::testing::DefaultValue` + +Allows a user to specify the default value for a type `T` that is both copyable +and publicly destructible (i.e. anything that can be used as a function return +type). For mock functions with a return type of `T`, this default value is +returned from function calls that do not specify an action. + +Provides the static methods `Set()`, `SetFactory()`, and `Clear()` to manage the +default value: + +```cpp +// Sets the default value to be returned. T must be copy constructible. +DefaultValue::Set(value); + +// Sets a factory. Will be invoked on demand. T must be move constructible. +T MakeT(); +DefaultValue::SetFactory(&MakeT); + +// Unsets the default value. +DefaultValue::Clear(); +``` + +### NiceMock {#NiceMock} + +`::testing::NiceMock` + +Represents a mock object that suppresses warnings on +[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The +template parameter `T` is any mock class, except for another `NiceMock`, +`NaggyMock`, or `StrictMock`. + +Usage of `NiceMock` is analogous to usage of `T`. `NiceMock` is a subclass +of `T`, so it can be used wherever an object of type `T` is accepted. In +addition, `NiceMock` can be constructed with any arguments that a constructor +of `T` accepts. + +For example, the following code suppresses warnings on the mock `my_mock` of +type `MockClass` if a method other than `DoSomething()` is called: + +```cpp +using ::testing::NiceMock; +... +NiceMock my_mock("some", "args"); +EXPECT_CALL(my_mock, DoSomething()); +... code that uses my_mock ... +``` + +`NiceMock` only works for mock methods defined using the `MOCK_METHOD` macro +directly in the definition of class `T`. If a mock method is defined in a base +class of `T`, a warning might still be generated. + +`NiceMock` might not work correctly if the destructor of `T` is not virtual. + +### NaggyMock {#NaggyMock} + +`::testing::NaggyMock` + +Represents a mock object that generates warnings on +[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The +template parameter `T` is any mock class, except for another `NiceMock`, +`NaggyMock`, or `StrictMock`. + +Usage of `NaggyMock` is analogous to usage of `T`. `NaggyMock` is a +subclass of `T`, so it can be used wherever an object of type `T` is accepted. +In addition, `NaggyMock` can be constructed with any arguments that a +constructor of `T` accepts. + +For example, the following code generates warnings on the mock `my_mock` of type +`MockClass` if a method other than `DoSomething()` is called: + +```cpp +using ::testing::NaggyMock; +... +NaggyMock my_mock("some", "args"); +EXPECT_CALL(my_mock, DoSomething()); +... code that uses my_mock ... +``` + +Mock objects of type `T` by default behave the same way as `NaggyMock`. + +### StrictMock {#StrictMock} + +`::testing::StrictMock` + +Represents a mock object that generates test failures on +[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The +template parameter `T` is any mock class, except for another `NiceMock`, +`NaggyMock`, or `StrictMock`. + +Usage of `StrictMock` is analogous to usage of `T`. `StrictMock` is a +subclass of `T`, so it can be used wherever an object of type `T` is accepted. +In addition, `StrictMock` can be constructed with any arguments that a +constructor of `T` accepts. + +For example, the following code generates a test failure on the mock `my_mock` +of type `MockClass` if a method other than `DoSomething()` is called: + +```cpp +using ::testing::StrictMock; +... +StrictMock my_mock("some", "args"); +EXPECT_CALL(my_mock, DoSomething()); +... code that uses my_mock ... +``` + +`StrictMock` only works for mock methods defined using the `MOCK_METHOD` +macro directly in the definition of class `T`. If a mock method is defined in a +base class of `T`, a failure might not be generated. + +`StrictMock` might not work correctly if the destructor of `T` is not +virtual. + +### Sequence {#Sequence} + +`::testing::Sequence` + +Represents a chronological sequence of expectations. See the +[`InSequence`](#EXPECT_CALL.InSequence) clause of `EXPECT_CALL` for usage. + +### InSequence {#InSequence} + +`::testing::InSequence` + +An object of this type causes all expectations encountered in its scope to be +put in an anonymous sequence. + +This allows more convenient expression of multiple expectations in a single +sequence: + +```cpp +using ::testing::InSequence; +{ + InSequence seq; + + // The following are expected to occur in the order declared. + EXPECT_CALL(...); + EXPECT_CALL(...); + ... + EXPECT_CALL(...); +} +``` + +The name of the `InSequence` object does not matter. + +### Expectation {#Expectation} + +`::testing::Expectation` + +Represents a mock function call expectation as created by +[`EXPECT_CALL`](#EXPECT_CALL): + +```cpp +using ::testing::Expectation; +Expectation my_expectation = EXPECT_CALL(...); +``` + +Useful for specifying sequences of expectations; see the +[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. + +### ExpectationSet {#ExpectationSet} + +`::testing::ExpectationSet` + +Represents a set of mock function call expectations. + +Use the `+=` operator to add [`Expectation`](#Expectation) objects to the set: + +```cpp +using ::testing::ExpectationSet; +ExpectationSet my_expectations; +my_expectations += EXPECT_CALL(...); +``` + +Useful for specifying sequences of expectations; see the +[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. diff --git a/_codeql_build_dir/_deps/googletest-src/docs/reference/testing.md b/_codeql_build_dir/_deps/googletest-src/docs/reference/testing.md new file mode 100644 index 0000000..554d6c9 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/reference/testing.md @@ -0,0 +1,1431 @@ +# Testing Reference + + + +This page lists the facilities provided by GoogleTest for writing test programs. +To use them, include the header `gtest/gtest.h`. + +## Macros + +GoogleTest defines the following macros for writing tests. + +### TEST {#TEST} + +
+TEST(TestSuiteName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual test named *`TestName`* in the test suite +*`TestSuiteName`*, consisting of the given statements. + +Both arguments *`TestSuiteName`* and *`TestName`* must be valid C++ identifiers +and must not contain underscores (`_`). Tests in different test suites can have +the same individual name. + +The statements within the test body can be any code under test. +[Assertions](assertions.md) used within the test body determine the outcome of +the test. + +### TEST_F {#TEST_F} + +
+TEST_F(TestFixtureName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual test named *`TestName`* that uses the test fixture class +*`TestFixtureName`*. The test suite name is *`TestFixtureName`*. + +Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ +identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be +the name of a test fixture class—see +[Test Fixtures](../primer.md#same-data-multiple-tests). + +The statements within the test body can be any code under test. +[Assertions](assertions.md) used within the test body determine the outcome of +the test. + +### TEST_P {#TEST_P} + +
+TEST_P(TestFixtureName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual value-parameterized test named *`TestName`* that uses the +test fixture class *`TestFixtureName`*. The test suite name is +*`TestFixtureName`*. + +Both arguments *`TestFixtureName`* and *`TestName`* must be valid C++ +identifiers and must not contain underscores (`_`). *`TestFixtureName`* must be +the name of a value-parameterized test fixture class—see +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +The statements within the test body can be any code under test. Within the test +body, the test parameter can be accessed with the `GetParam()` function (see +[`WithParamInterface`](#WithParamInterface)). For example: + +```cpp +TEST_P(MyTestSuite, DoesSomething) { + ... + EXPECT_TRUE(DoSomething(GetParam())); + ... +} +``` + +[Assertions](assertions.md) used within the test body determine the outcome of +the test. + +See also [`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). + +### INSTANTIATE_TEST_SUITE_P {#INSTANTIATE_TEST_SUITE_P} + +`INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`)` +\ +`INSTANTIATE_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`param_generator`*`,`*`name_generator`*`)` + +Instantiates the value-parameterized test suite *`TestSuiteName`* (defined with +[`TEST_P`](#TEST_P)). + +The argument *`InstantiationName`* is a unique name for the instantiation of the +test suite, to distinguish between multiple instantiations. In test output, the +instantiation name is added as a prefix to the test suite name +*`TestSuiteName`*. + +The argument *`param_generator`* is one of the following GoogleTest-provided +functions that generate the test parameters, all defined in the `::testing` +namespace: + + + +| Parameter Generator | Behavior | +| ------------------- | ---------------------------------------------------- | +| `Range(begin, end [, step])` | Yields values `{begin, begin+step, begin+step+step, ...}`. The values do not include `end`. `step` defaults to 1. | +| `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. | +| `ValuesIn(container)` or `ValuesIn(begin,end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. | +| `Bool()` | Yields sequence `{false, true}`. | +| `Combine(g1, g2, ..., gN)` | Yields as `std::tuple` *n*-tuples all combinations (Cartesian product) of the values generated by the given *n* generators `g1`, `g2`, ..., `gN`. | + +The optional last argument *`name_generator`* is a function or functor that +generates custom test name suffixes based on the test parameters. The function +must accept an argument of type +[`TestParamInfo`](#TestParamInfo) and return a `std::string`. +The test name suffix can only contain alphanumeric characters and underscores. +GoogleTest provides [`PrintToStringParamName`](#PrintToStringParamName), or a +custom function can be used for more control: + +```cpp +INSTANTIATE_TEST_SUITE_P( + MyInstantiation, MyTestSuite, + ::testing::Values(...), + [](const ::testing::TestParamInfo& info) { + // Can use info.param here to generate the test suffix + std::string name = ... + return name; + }); +``` + +For more information, see +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +See also +[`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST`](#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST). + +### TYPED_TEST_SUITE {#TYPED_TEST_SUITE} + +`TYPED_TEST_SUITE(`*`TestFixtureName`*`,`*`Types`*`)` + +Defines a typed test suite based on the test fixture *`TestFixtureName`*. The +test suite name is *`TestFixtureName`*. + +The argument *`TestFixtureName`* is a fixture class template, parameterized by a +type, for example: + +```cpp +template +class MyFixture : public ::testing::Test { + public: + ... + using List = std::list; + static T shared_; + T value_; +}; +``` + +The argument *`Types`* is a [`Types`](#Types) object representing the list of +types to run the tests on, for example: + +```cpp +using MyTypes = ::testing::Types; +TYPED_TEST_SUITE(MyFixture, MyTypes); +``` + +The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE` +macro to parse correctly. + +See also [`TYPED_TEST`](#TYPED_TEST) and +[Typed Tests](../advanced.md#typed-tests) for more information. + +### TYPED_TEST {#TYPED_TEST} + +
+TYPED_TEST(TestSuiteName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual typed test named *`TestName`* in the typed test suite +*`TestSuiteName`*. The test suite must be defined with +[`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE). + +Within the test body, the special name `TypeParam` refers to the type parameter, +and `TestFixture` refers to the fixture class. See the following example: + +```cpp +TYPED_TEST(MyFixture, Example) { + // Inside a test, refer to the special name TypeParam to get the type + // parameter. Since we are inside a derived class template, C++ requires + // us to visit the members of MyFixture via 'this'. + TypeParam n = this->value_; + + // To visit static members of the fixture, add the 'TestFixture::' + // prefix. + n += TestFixture::shared_; + + // To refer to typedefs in the fixture, add the 'typename TestFixture::' + // prefix. The 'typename' is required to satisfy the compiler. + typename TestFixture::List values; + + values.push_back(n); + ... +} +``` + +For more information, see [Typed Tests](../advanced.md#typed-tests). + +### TYPED_TEST_SUITE_P {#TYPED_TEST_SUITE_P} + +`TYPED_TEST_SUITE_P(`*`TestFixtureName`*`)` + +Defines a type-parameterized test suite based on the test fixture +*`TestFixtureName`*. The test suite name is *`TestFixtureName`*. + +The argument *`TestFixtureName`* is a fixture class template, parameterized by a +type. See [`TYPED_TEST_SUITE`](#TYPED_TEST_SUITE) for an example. + +See also [`TYPED_TEST_P`](#TYPED_TEST_P) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### TYPED_TEST_P {#TYPED_TEST_P} + +
+TYPED_TEST_P(TestSuiteName, TestName) {
+  ... statements ...
+}
+
+ +Defines an individual type-parameterized test named *`TestName`* in the +type-parameterized test suite *`TestSuiteName`*. The test suite must be defined +with [`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P). + +Within the test body, the special name `TypeParam` refers to the type parameter, +and `TestFixture` refers to the fixture class. See [`TYPED_TEST`](#TYPED_TEST) +for an example. + +See also [`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### REGISTER_TYPED_TEST_SUITE_P {#REGISTER_TYPED_TEST_SUITE_P} + +`REGISTER_TYPED_TEST_SUITE_P(`*`TestSuiteName`*`,`*`TestNames...`*`)` + +Registers the type-parameterized tests *`TestNames...`* of the test suite +*`TestSuiteName`*. The test suite and tests must be defined with +[`TYPED_TEST_SUITE_P`](#TYPED_TEST_SUITE_P) and [`TYPED_TEST_P`](#TYPED_TEST_P). + +For example: + +```cpp +// Define the test suite and tests. +TYPED_TEST_SUITE_P(MyFixture); +TYPED_TEST_P(MyFixture, HasPropertyA) { ... } +TYPED_TEST_P(MyFixture, HasPropertyB) { ... } + +// Register the tests in the test suite. +REGISTER_TYPED_TEST_SUITE_P(MyFixture, HasPropertyA, HasPropertyB); +``` + +See also [`INSTANTIATE_TYPED_TEST_SUITE_P`](#INSTANTIATE_TYPED_TEST_SUITE_P) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### INSTANTIATE_TYPED_TEST_SUITE_P {#INSTANTIATE_TYPED_TEST_SUITE_P} + +`INSTANTIATE_TYPED_TEST_SUITE_P(`*`InstantiationName`*`,`*`TestSuiteName`*`,`*`Types`*`)` + +Instantiates the type-parameterized test suite *`TestSuiteName`*. The test suite +must be registered with +[`REGISTER_TYPED_TEST_SUITE_P`](#REGISTER_TYPED_TEST_SUITE_P). + +The argument *`InstantiationName`* is a unique name for the instantiation of the +test suite, to distinguish between multiple instantiations. In test output, the +instantiation name is added as a prefix to the test suite name +*`TestSuiteName`*. + +The argument *`Types`* is a [`Types`](#Types) object representing the list of +types to run the tests on, for example: + +```cpp +using MyTypes = ::testing::Types; +INSTANTIATE_TYPED_TEST_SUITE_P(MyInstantiation, MyFixture, MyTypes); +``` + +The type alias (`using` or `typedef`) is necessary for the +`INSTANTIATE_TYPED_TEST_SUITE_P` macro to parse correctly. + +For more information, see +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). + +### FRIEND_TEST {#FRIEND_TEST} + +`FRIEND_TEST(`*`TestSuiteName`*`,`*`TestName`*`)` + +Within a class body, declares an individual test as a friend of the class, +enabling the test to access private class members. + +If the class is defined in a namespace, then in order to be friends of the +class, test fixtures and tests must be defined in the exact same namespace, +without inline or anonymous namespaces. + +For example, if the class definition looks like the following: + +```cpp +namespace my_namespace { + +class MyClass { + friend class MyClassTest; + FRIEND_TEST(MyClassTest, HasPropertyA); + FRIEND_TEST(MyClassTest, HasPropertyB); + ... definition of class MyClass ... +}; + +} // namespace my_namespace +``` + +Then the test code should look like: + +```cpp +namespace my_namespace { + +class MyClassTest : public ::testing::Test { + ... +}; + +TEST_F(MyClassTest, HasPropertyA) { ... } +TEST_F(MyClassTest, HasPropertyB) { ... } + +} // namespace my_namespace +``` + +See [Testing Private Code](../advanced.md#testing-private-code) for more +information. + +### SCOPED_TRACE {#SCOPED_TRACE} + +`SCOPED_TRACE(`*`message`*`)` + +Causes the current file name, line number, and the given message *`message`* to +be added to the failure message for each assertion failure that occurs in the +scope. + +For more information, see +[Adding Traces to Assertions](../advanced.md#adding-traces-to-assertions). + +See also the [`ScopedTrace` class](#ScopedTrace). + +### GTEST_SKIP {#GTEST_SKIP} + +`GTEST_SKIP()` + +Prevents further test execution at runtime. + +Can be used in individual test cases or in the `SetUp()` methods of test +environments or test fixtures (classes derived from the +[`Environment`](#Environment) or [`Test`](#Test) classes). If used in a global +test environment `SetUp()` method, it skips all tests in the test program. If +used in a test fixture `SetUp()` method, it skips all tests in the corresponding +test suite. + +Similar to assertions, `GTEST_SKIP` allows streaming a custom message into it. + +See [Skipping Test Execution](../advanced.md#skipping-test-execution) for more +information. + +### GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST {#GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST} + +`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(`*`TestSuiteName`*`)` + +Allows the value-parameterized test suite *`TestSuiteName`* to be +uninstantiated. + +By default, every [`TEST_P`](#TEST_P) call without a corresponding +[`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P) call causes a failing +test in the test suite `GoogleTestVerification`. +`GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST` suppresses this failure for the +given test suite. + +## Classes and types + +GoogleTest defines the following classes and types to help with writing tests. + +### AssertionResult {#AssertionResult} + +`::testing::AssertionResult` + +A class for indicating whether an assertion was successful. + +When the assertion wasn't successful, the `AssertionResult` object stores a +non-empty failure message that can be retrieved with the object's `message()` +method. + +To create an instance of this class, use one of the factory functions +[`AssertionSuccess()`](#AssertionSuccess) or +[`AssertionFailure()`](#AssertionFailure). + +### AssertionException {#AssertionException} + +`::testing::AssertionException` + +Exception which can be thrown from +[`TestEventListener::OnTestPartResult`](#TestEventListener::OnTestPartResult). + +### EmptyTestEventListener {#EmptyTestEventListener} + +`::testing::EmptyTestEventListener` + +Provides an empty implementation of all methods in the +[`TestEventListener`](#TestEventListener) interface, such that a subclass only +needs to override the methods it cares about. + +### Environment {#Environment} + +`::testing::Environment` + +Represents a global test environment. See +[Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down). + +#### Protected Methods {#Environment-protected} + +##### SetUp {#Environment::SetUp} + +`virtual void Environment::SetUp()` + +Override this to define how to set up the environment. + +##### TearDown {#Environment::TearDown} + +`virtual void Environment::TearDown()` + +Override this to define how to tear down the environment. + +### ScopedTrace {#ScopedTrace} + +`::testing::ScopedTrace` + +An instance of this class causes a trace to be included in every test failure +message generated by code in the scope of the lifetime of the `ScopedTrace` +instance. The effect is undone with the destruction of the instance. + +The `ScopedTrace` constructor has the following form: + +```cpp +template +ScopedTrace(const char* file, int line, const T& message) +``` + +Example usage: + +```cpp +::testing::ScopedTrace trace("file.cc", 123, "message"); +``` + +The resulting trace includes the given source file path and line number, and the +given message. The `message` argument can be anything streamable to +`std::ostream`. + +See also [`SCOPED_TRACE`](#SCOPED_TRACE). + +### Test {#Test} + +`::testing::Test` + +The abstract class that all tests inherit from. `Test` is not copyable. + +#### Public Methods {#Test-public} + +##### SetUpTestSuite {#Test::SetUpTestSuite} + +`static void Test::SetUpTestSuite()` + +Performs shared setup for all tests in the test suite. GoogleTest calls +`SetUpTestSuite()` before running the first test in the test suite. + +##### TearDownTestSuite {#Test::TearDownTestSuite} + +`static void Test::TearDownTestSuite()` + +Performs shared teardown for all tests in the test suite. GoogleTest calls +`TearDownTestSuite()` after running the last test in the test suite. + +##### HasFatalFailure {#Test::HasFatalFailure} + +`static bool Test::HasFatalFailure()` + +Returns true if and only if the current test has a fatal failure. + +##### HasNonfatalFailure {#Test::HasNonfatalFailure} + +`static bool Test::HasNonfatalFailure()` + +Returns true if and only if the current test has a nonfatal failure. + +##### HasFailure {#Test::HasFailure} + +`static bool Test::HasFailure()` + +Returns true if and only if the current test has any failure, either fatal or +nonfatal. + +##### IsSkipped {#Test::IsSkipped} + +`static bool Test::IsSkipped()` + +Returns true if and only if the current test was skipped. + +##### RecordProperty {#Test::RecordProperty} + +`static void Test::RecordProperty(const std::string& key, const std::string& +value)` \ +`static void Test::RecordProperty(const std::string& key, int value)` + +Logs a property for the current test, test suite, or entire invocation of the +test program. Only the last value for a given key is logged. + +The key must be a valid XML attribute name, and cannot conflict with the ones +already used by GoogleTest (`name`, `status`, `time`, `classname`, `type_param`, +and `value_param`). + +`RecordProperty` is `public static` so it can be called from utility functions +that are not members of the test fixture. + +Calls to `RecordProperty` made during the lifespan of the test (from the moment +its constructor starts to the moment its destructor finishes) are output in XML +as attributes of the `` element. Properties recorded from a fixture's +`SetUpTestSuite` or `TearDownTestSuite` methods are logged as attributes of the +corresponding `` element. Calls to `RecordProperty` made in the +global context (before or after invocation of `RUN_ALL_TESTS` or from the +`SetUp`/`TearDown` methods of registered `Environment` objects) are output as +attributes of the `` element. + +#### Protected Methods {#Test-protected} + +##### SetUp {#Test::SetUp} + +`virtual void Test::SetUp()` + +Override this to perform test fixture setup. GoogleTest calls `SetUp()` before +running each individual test. + +##### TearDown {#Test::TearDown} + +`virtual void Test::TearDown()` + +Override this to perform test fixture teardown. GoogleTest calls `TearDown()` +after running each individual test. + +### TestWithParam {#TestWithParam} + +`::testing::TestWithParam` + +A convenience class which inherits from both [`Test`](#Test) and +[`WithParamInterface`](#WithParamInterface). + +### TestSuite {#TestSuite} + +Represents a test suite. `TestSuite` is not copyable. + +#### Public Methods {#TestSuite-public} + +##### name {#TestSuite::name} + +`const char* TestSuite::name() const` + +Gets the name of the test suite. + +##### type_param {#TestSuite::type_param} + +`const char* TestSuite::type_param() const` + +Returns the name of the parameter type, or `NULL` if this is not a typed or +type-parameterized test suite. See [Typed Tests](../advanced.md#typed-tests) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). + +##### should_run {#TestSuite::should_run} + +`bool TestSuite::should_run() const` + +Returns true if any test in this test suite should run. + +##### successful_test_count {#TestSuite::successful_test_count} + +`int TestSuite::successful_test_count() const` + +Gets the number of successful tests in this test suite. + +##### skipped_test_count {#TestSuite::skipped_test_count} + +`int TestSuite::skipped_test_count() const` + +Gets the number of skipped tests in this test suite. + +##### failed_test_count {#TestSuite::failed_test_count} + +`int TestSuite::failed_test_count() const` + +Gets the number of failed tests in this test suite. + +##### reportable_disabled_test_count {#TestSuite::reportable_disabled_test_count} + +`int TestSuite::reportable_disabled_test_count() const` + +Gets the number of disabled tests that will be reported in the XML report. + +##### disabled_test_count {#TestSuite::disabled_test_count} + +`int TestSuite::disabled_test_count() const` + +Gets the number of disabled tests in this test suite. + +##### reportable_test_count {#TestSuite::reportable_test_count} + +`int TestSuite::reportable_test_count() const` + +Gets the number of tests to be printed in the XML report. + +##### test_to_run_count {#TestSuite::test_to_run_count} + +`int TestSuite::test_to_run_count() const` + +Get the number of tests in this test suite that should run. + +##### total_test_count {#TestSuite::total_test_count} + +`int TestSuite::total_test_count() const` + +Gets the number of all tests in this test suite. + +##### Passed {#TestSuite::Passed} + +`bool TestSuite::Passed() const` + +Returns true if and only if the test suite passed. + +##### Failed {#TestSuite::Failed} + +`bool TestSuite::Failed() const` + +Returns true if and only if the test suite failed. + +##### elapsed_time {#TestSuite::elapsed_time} + +`TimeInMillis TestSuite::elapsed_time() const` + +Returns the elapsed time, in milliseconds. + +##### start_timestamp {#TestSuite::start_timestamp} + +`TimeInMillis TestSuite::start_timestamp() const` + +Gets the time of the test suite start, in ms from the start of the UNIX epoch. + +##### GetTestInfo {#TestSuite::GetTestInfo} + +`const TestInfo* TestSuite::GetTestInfo(int i) const` + +Returns the [`TestInfo`](#TestInfo) for the `i`-th test among all the tests. `i` +can range from 0 to `total_test_count() - 1`. If `i` is not in that range, +returns `NULL`. + +##### ad_hoc_test_result {#TestSuite::ad_hoc_test_result} + +`const TestResult& TestSuite::ad_hoc_test_result() const` + +Returns the [`TestResult`](#TestResult) that holds test properties recorded +during execution of `SetUpTestSuite` and `TearDownTestSuite`. + +### TestInfo {#TestInfo} + +`::testing::TestInfo` + +Stores information about a test. + +#### Public Methods {#TestInfo-public} + +##### test_suite_name {#TestInfo::test_suite_name} + +`const char* TestInfo::test_suite_name() const` + +Returns the test suite name. + +##### name {#TestInfo::name} + +`const char* TestInfo::name() const` + +Returns the test name. + +##### type_param {#TestInfo::type_param} + +`const char* TestInfo::type_param() const` + +Returns the name of the parameter type, or `NULL` if this is not a typed or +type-parameterized test. See [Typed Tests](../advanced.md#typed-tests) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests). + +##### value_param {#TestInfo::value_param} + +`const char* TestInfo::value_param() const` + +Returns the text representation of the value parameter, or `NULL` if this is not +a value-parameterized test. See +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +##### file {#TestInfo::file} + +`const char* TestInfo::file() const` + +Returns the file name where this test is defined. + +##### line {#TestInfo::line} + +`int TestInfo::line() const` + +Returns the line where this test is defined. + +##### is_in_another_shard {#TestInfo::is_in_another_shard} + +`bool TestInfo::is_in_another_shard() const` + +Returns true if this test should not be run because it's in another shard. + +##### should_run {#TestInfo::should_run} + +`bool TestInfo::should_run() const` + +Returns true if this test should run, that is if the test is not disabled (or it +is disabled but the `also_run_disabled_tests` flag has been specified) and its +full name matches the user-specified filter. + +GoogleTest allows the user to filter the tests by their full names. Only the +tests that match the filter will run. See +[Running a Subset of the Tests](../advanced.md#running-a-subset-of-the-tests) +for more information. + +##### is_reportable {#TestInfo::is_reportable} + +`bool TestInfo::is_reportable() const` + +Returns true if and only if this test will appear in the XML report. + +##### result {#TestInfo::result} + +`const TestResult* TestInfo::result() const` + +Returns the result of the test. See [`TestResult`](#TestResult). + +### TestParamInfo {#TestParamInfo} + +`::testing::TestParamInfo` + +Describes a parameter to a value-parameterized test. The type `T` is the type of +the parameter. + +Contains the fields `param` and `index` which hold the value of the parameter +and its integer index respectively. + +### UnitTest {#UnitTest} + +`::testing::UnitTest` + +This class contains information about the test program. + +`UnitTest` is a singleton class. The only instance is created when +`UnitTest::GetInstance()` is first called. This instance is never deleted. + +`UnitTest` is not copyable. + +#### Public Methods {#UnitTest-public} + +##### GetInstance {#UnitTest::GetInstance} + +`static UnitTest* UnitTest::GetInstance()` + +Gets the singleton `UnitTest` object. The first time this method is called, a +`UnitTest` object is constructed and returned. Consecutive calls will return the +same object. + +##### original_working_dir {#UnitTest::original_working_dir} + +`const char* UnitTest::original_working_dir() const` + +Returns the working directory when the first [`TEST()`](#TEST) or +[`TEST_F()`](#TEST_F) was executed. The `UnitTest` object owns the string. + +##### current_test_suite {#UnitTest::current_test_suite} + +`const TestSuite* UnitTest::current_test_suite() const` + +Returns the [`TestSuite`](#TestSuite) object for the test that's currently +running, or `NULL` if no test is running. + +##### current_test_info {#UnitTest::current_test_info} + +`const TestInfo* UnitTest::current_test_info() const` + +Returns the [`TestInfo`](#TestInfo) object for the test that's currently +running, or `NULL` if no test is running. + +##### random_seed {#UnitTest::random_seed} + +`int UnitTest::random_seed() const` + +Returns the random seed used at the start of the current test run. + +##### successful_test_suite_count {#UnitTest::successful_test_suite_count} + +`int UnitTest::successful_test_suite_count() const` + +Gets the number of successful test suites. + +##### failed_test_suite_count {#UnitTest::failed_test_suite_count} + +`int UnitTest::failed_test_suite_count() const` + +Gets the number of failed test suites. + +##### total_test_suite_count {#UnitTest::total_test_suite_count} + +`int UnitTest::total_test_suite_count() const` + +Gets the number of all test suites. + +##### test_suite_to_run_count {#UnitTest::test_suite_to_run_count} + +`int UnitTest::test_suite_to_run_count() const` + +Gets the number of all test suites that contain at least one test that should +run. + +##### successful_test_count {#UnitTest::successful_test_count} + +`int UnitTest::successful_test_count() const` + +Gets the number of successful tests. + +##### skipped_test_count {#UnitTest::skipped_test_count} + +`int UnitTest::skipped_test_count() const` + +Gets the number of skipped tests. + +##### failed_test_count {#UnitTest::failed_test_count} + +`int UnitTest::failed_test_count() const` + +Gets the number of failed tests. + +##### reportable_disabled_test_count {#UnitTest::reportable_disabled_test_count} + +`int UnitTest::reportable_disabled_test_count() const` + +Gets the number of disabled tests that will be reported in the XML report. + +##### disabled_test_count {#UnitTest::disabled_test_count} + +`int UnitTest::disabled_test_count() const` + +Gets the number of disabled tests. + +##### reportable_test_count {#UnitTest::reportable_test_count} + +`int UnitTest::reportable_test_count() const` + +Gets the number of tests to be printed in the XML report. + +##### total_test_count {#UnitTest::total_test_count} + +`int UnitTest::total_test_count() const` + +Gets the number of all tests. + +##### test_to_run_count {#UnitTest::test_to_run_count} + +`int UnitTest::test_to_run_count() const` + +Gets the number of tests that should run. + +##### start_timestamp {#UnitTest::start_timestamp} + +`TimeInMillis UnitTest::start_timestamp() const` + +Gets the time of the test program start, in ms from the start of the UNIX epoch. + +##### elapsed_time {#UnitTest::elapsed_time} + +`TimeInMillis UnitTest::elapsed_time() const` + +Gets the elapsed time, in milliseconds. + +##### Passed {#UnitTest::Passed} + +`bool UnitTest::Passed() const` + +Returns true if and only if the unit test passed (i.e. all test suites passed). + +##### Failed {#UnitTest::Failed} + +`bool UnitTest::Failed() const` + +Returns true if and only if the unit test failed (i.e. some test suite failed or +something outside of all tests failed). + +##### GetTestSuite {#UnitTest::GetTestSuite} + +`const TestSuite* UnitTest::GetTestSuite(int i) const` + +Gets the [`TestSuite`](#TestSuite) object for the `i`-th test suite among all +the test suites. `i` can range from 0 to `total_test_suite_count() - 1`. If `i` +is not in that range, returns `NULL`. + +##### ad_hoc_test_result {#UnitTest::ad_hoc_test_result} + +`const TestResult& UnitTest::ad_hoc_test_result() const` + +Returns the [`TestResult`](#TestResult) containing information on test failures +and properties logged outside of individual test suites. + +##### listeners {#UnitTest::listeners} + +`TestEventListeners& UnitTest::listeners()` + +Returns the list of event listeners that can be used to track events inside +GoogleTest. See [`TestEventListeners`](#TestEventListeners). + +### TestEventListener {#TestEventListener} + +`::testing::TestEventListener` + +The interface for tracing execution of tests. The methods below are listed in +the order the corresponding events are fired. + +#### Public Methods {#TestEventListener-public} + +##### OnTestProgramStart {#TestEventListener::OnTestProgramStart} + +`virtual void TestEventListener::OnTestProgramStart(const UnitTest& unit_test)` + +Fired before any test activity starts. + +##### OnTestIterationStart {#TestEventListener::OnTestIterationStart} + +`virtual void TestEventListener::OnTestIterationStart(const UnitTest& unit_test, +int iteration)` + +Fired before each iteration of tests starts. There may be more than one +iteration if `GTEST_FLAG(repeat)` is set. `iteration` is the iteration index, +starting from 0. + +##### OnEnvironmentsSetUpStart {#TestEventListener::OnEnvironmentsSetUpStart} + +`virtual void TestEventListener::OnEnvironmentsSetUpStart(const UnitTest& +unit_test)` + +Fired before environment set-up for each iteration of tests starts. + +##### OnEnvironmentsSetUpEnd {#TestEventListener::OnEnvironmentsSetUpEnd} + +`virtual void TestEventListener::OnEnvironmentsSetUpEnd(const UnitTest& +unit_test)` + +Fired after environment set-up for each iteration of tests ends. + +##### OnTestSuiteStart {#TestEventListener::OnTestSuiteStart} + +`virtual void TestEventListener::OnTestSuiteStart(const TestSuite& test_suite)` + +Fired before the test suite starts. + +##### OnTestStart {#TestEventListener::OnTestStart} + +`virtual void TestEventListener::OnTestStart(const TestInfo& test_info)` + +Fired before the test starts. + +##### OnTestPartResult {#TestEventListener::OnTestPartResult} + +`virtual void TestEventListener::OnTestPartResult(const TestPartResult& +test_part_result)` + +Fired after a failed assertion or a `SUCCEED()` invocation. If you want to throw +an exception from this function to skip to the next test, it must be an +[`AssertionException`](#AssertionException) or inherited from it. + +##### OnTestEnd {#TestEventListener::OnTestEnd} + +`virtual void TestEventListener::OnTestEnd(const TestInfo& test_info)` + +Fired after the test ends. + +##### OnTestSuiteEnd {#TestEventListener::OnTestSuiteEnd} + +`virtual void TestEventListener::OnTestSuiteEnd(const TestSuite& test_suite)` + +Fired after the test suite ends. + +##### OnEnvironmentsTearDownStart {#TestEventListener::OnEnvironmentsTearDownStart} + +`virtual void TestEventListener::OnEnvironmentsTearDownStart(const UnitTest& +unit_test)` + +Fired before environment tear-down for each iteration of tests starts. + +##### OnEnvironmentsTearDownEnd {#TestEventListener::OnEnvironmentsTearDownEnd} + +`virtual void TestEventListener::OnEnvironmentsTearDownEnd(const UnitTest& +unit_test)` + +Fired after environment tear-down for each iteration of tests ends. + +##### OnTestIterationEnd {#TestEventListener::OnTestIterationEnd} + +`virtual void TestEventListener::OnTestIterationEnd(const UnitTest& unit_test, +int iteration)` + +Fired after each iteration of tests finishes. + +##### OnTestProgramEnd {#TestEventListener::OnTestProgramEnd} + +`virtual void TestEventListener::OnTestProgramEnd(const UnitTest& unit_test)` + +Fired after all test activities have ended. + +### TestEventListeners {#TestEventListeners} + +`::testing::TestEventListeners` + +Lets users add listeners to track events in GoogleTest. + +#### Public Methods {#TestEventListeners-public} + +##### Append {#TestEventListeners::Append} + +`void TestEventListeners::Append(TestEventListener* listener)` + +Appends an event listener to the end of the list. GoogleTest assumes ownership +of the listener (i.e. it will delete the listener when the test program +finishes). + +##### Release {#TestEventListeners::Release} + +`TestEventListener* TestEventListeners::Release(TestEventListener* listener)` + +Removes the given event listener from the list and returns it. It then becomes +the caller's responsibility to delete the listener. Returns `NULL` if the +listener is not found in the list. + +##### default_result_printer {#TestEventListeners::default_result_printer} + +`TestEventListener* TestEventListeners::default_result_printer() const` + +Returns the standard listener responsible for the default console output. Can be +removed from the listeners list to shut down default console output. Note that +removing this object from the listener list with +[`Release()`](#TestEventListeners::Release) transfers its ownership to the +caller and makes this function return `NULL` the next time. + +##### default_xml_generator {#TestEventListeners::default_xml_generator} + +`TestEventListener* TestEventListeners::default_xml_generator() const` + +Returns the standard listener responsible for the default XML output controlled +by the `--gtest_output=xml` flag. Can be removed from the listeners list by +users who want to shut down the default XML output controlled by this flag and +substitute it with custom one. Note that removing this object from the listener +list with [`Release()`](#TestEventListeners::Release) transfers its ownership to +the caller and makes this function return `NULL` the next time. + +### TestPartResult {#TestPartResult} + +`::testing::TestPartResult` + +A copyable object representing the result of a test part (i.e. an assertion or +an explicit `FAIL()`, `ADD_FAILURE()`, or `SUCCESS()`). + +#### Public Methods {#TestPartResult-public} + +##### type {#TestPartResult::type} + +`Type TestPartResult::type() const` + +Gets the outcome of the test part. + +The return type `Type` is an enum defined as follows: + +```cpp +enum Type { + kSuccess, // Succeeded. + kNonFatalFailure, // Failed but the test can continue. + kFatalFailure, // Failed and the test should be terminated. + kSkip // Skipped. +}; +``` + +##### file_name {#TestPartResult::file_name} + +`const char* TestPartResult::file_name() const` + +Gets the name of the source file where the test part took place, or `NULL` if +it's unknown. + +##### line_number {#TestPartResult::line_number} + +`int TestPartResult::line_number() const` + +Gets the line in the source file where the test part took place, or `-1` if it's +unknown. + +##### summary {#TestPartResult::summary} + +`const char* TestPartResult::summary() const` + +Gets the summary of the failure message. + +##### message {#TestPartResult::message} + +`const char* TestPartResult::message() const` + +Gets the message associated with the test part. + +##### skipped {#TestPartResult::skipped} + +`bool TestPartResult::skipped() const` + +Returns true if and only if the test part was skipped. + +##### passed {#TestPartResult::passed} + +`bool TestPartResult::passed() const` + +Returns true if and only if the test part passed. + +##### nonfatally_failed {#TestPartResult::nonfatally_failed} + +`bool TestPartResult::nonfatally_failed() const` + +Returns true if and only if the test part non-fatally failed. + +##### fatally_failed {#TestPartResult::fatally_failed} + +`bool TestPartResult::fatally_failed() const` + +Returns true if and only if the test part fatally failed. + +##### failed {#TestPartResult::failed} + +`bool TestPartResult::failed() const` + +Returns true if and only if the test part failed. + +### TestProperty {#TestProperty} + +`::testing::TestProperty` + +A copyable object representing a user-specified test property which can be +output as a key/value string pair. + +#### Public Methods {#TestProperty-public} + +##### key {#key} + +`const char* key() const` + +Gets the user-supplied key. + +##### value {#value} + +`const char* value() const` + +Gets the user-supplied value. + +##### SetValue {#SetValue} + +`void SetValue(const std::string& new_value)` + +Sets a new value, overriding the previous one. + +### TestResult {#TestResult} + +`::testing::TestResult` + +Contains information about the result of a single test. + +`TestResult` is not copyable. + +#### Public Methods {#TestResult-public} + +##### total_part_count {#TestResult::total_part_count} + +`int TestResult::total_part_count() const` + +Gets the number of all test parts. This is the sum of the number of successful +test parts and the number of failed test parts. + +##### test_property_count {#TestResult::test_property_count} + +`int TestResult::test_property_count() const` + +Returns the number of test properties. + +##### Passed {#TestResult::Passed} + +`bool TestResult::Passed() const` + +Returns true if and only if the test passed (i.e. no test part failed). + +##### Skipped {#TestResult::Skipped} + +`bool TestResult::Skipped() const` + +Returns true if and only if the test was skipped. + +##### Failed {#TestResult::Failed} + +`bool TestResult::Failed() const` + +Returns true if and only if the test failed. + +##### HasFatalFailure {#TestResult::HasFatalFailure} + +`bool TestResult::HasFatalFailure() const` + +Returns true if and only if the test fatally failed. + +##### HasNonfatalFailure {#TestResult::HasNonfatalFailure} + +`bool TestResult::HasNonfatalFailure() const` + +Returns true if and only if the test has a non-fatal failure. + +##### elapsed_time {#TestResult::elapsed_time} + +`TimeInMillis TestResult::elapsed_time() const` + +Returns the elapsed time, in milliseconds. + +##### start_timestamp {#TestResult::start_timestamp} + +`TimeInMillis TestResult::start_timestamp() const` + +Gets the time of the test case start, in ms from the start of the UNIX epoch. + +##### GetTestPartResult {#TestResult::GetTestPartResult} + +`const TestPartResult& TestResult::GetTestPartResult(int i) const` + +Returns the [`TestPartResult`](#TestPartResult) for the `i`-th test part result +among all the results. `i` can range from 0 to `total_part_count() - 1`. If `i` +is not in that range, aborts the program. + +##### GetTestProperty {#TestResult::GetTestProperty} + +`const TestProperty& TestResult::GetTestProperty(int i) const` + +Returns the [`TestProperty`](#TestProperty) object for the `i`-th test property. +`i` can range from 0 to `test_property_count() - 1`. If `i` is not in that +range, aborts the program. + +### TimeInMillis {#TimeInMillis} + +`::testing::TimeInMillis` + +An integer type representing time in milliseconds. + +### Types {#Types} + +`::testing::Types` + +Represents a list of types for use in typed tests and type-parameterized tests. + +The template argument `T...` can be any number of types, for example: + +``` +::testing::Types +``` + +See [Typed Tests](../advanced.md#typed-tests) and +[Type-Parameterized Tests](../advanced.md#type-parameterized-tests) for more +information. + +### WithParamInterface {#WithParamInterface} + +`::testing::WithParamInterface` + +The pure interface class that all value-parameterized tests inherit from. + +A value-parameterized test fixture class must inherit from both [`Test`](#Test) +and `WithParamInterface`. In most cases that just means inheriting from +[`TestWithParam`](#TestWithParam), but more complicated test hierarchies may +need to inherit from `Test` and `WithParamInterface` at different levels. + +This interface defines the type alias `ParamType` for the parameter type `T` and +has support for accessing the test parameter value via the `GetParam()` method: + +``` +static const ParamType& GetParam() +``` + +For more information, see +[Value-Parameterized Tests](../advanced.md#value-parameterized-tests). + +## Functions + +GoogleTest defines the following functions to help with writing and running +tests. + +### InitGoogleTest {#InitGoogleTest} + +`void ::testing::InitGoogleTest(int* argc, char** argv)` \ +`void ::testing::InitGoogleTest(int* argc, wchar_t** argv)` \ +`void ::testing::InitGoogleTest()` + +Initializes GoogleTest. This must be called before calling +[`RUN_ALL_TESTS()`](#RUN_ALL_TESTS). In particular, it parses the command line +for the flags that GoogleTest recognizes. Whenever a GoogleTest flag is seen, it +is removed from `argv`, and `*argc` is decremented. + +No value is returned. Instead, the GoogleTest flag variables are updated. + +The `InitGoogleTest(int* argc, wchar_t** argv)` overload can be used in Windows +programs compiled in `UNICODE` mode. + +The argument-less `InitGoogleTest()` overload can be used on Arduino/embedded +platforms where there is no `argc`/`argv`. + +### AddGlobalTestEnvironment {#AddGlobalTestEnvironment} + +`Environment* ::testing::AddGlobalTestEnvironment(Environment* env)` + +Adds a test environment to the test program. Must be called before +[`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is called. See +[Global Set-Up and Tear-Down](../advanced.md#global-set-up-and-tear-down) for +more information. + +See also [`Environment`](#Environment). + +### RegisterTest {#RegisterTest} + +```cpp +template +TestInfo* ::testing::RegisterTest(const char* test_suite_name, const char* test_name, + const char* type_param, const char* value_param, + const char* file, int line, Factory factory) +``` + +Dynamically registers a test with the framework. + +The `factory` argument is a factory callable (move-constructible) object or +function pointer that creates a new instance of the `Test` object. It handles +ownership to the caller. The signature of the callable is `Fixture*()`, where +`Fixture` is the test fixture class for the test. All tests registered with the +same `test_suite_name` must return the same fixture type. This is checked at +runtime. + +The framework will infer the fixture class from the factory and will call the +`SetUpTestSuite` and `TearDownTestSuite` methods for it. + +Must be called before [`RUN_ALL_TESTS()`](#RUN_ALL_TESTS) is invoked, otherwise +behavior is undefined. + +See +[Registering tests programmatically](../advanced.md#registering-tests-programmatically) +for more information. + +### RUN_ALL_TESTS {#RUN_ALL_TESTS} + +`int RUN_ALL_TESTS()` + +Use this function in `main()` to run all tests. It returns `0` if all tests are +successful, or `1` otherwise. + +`RUN_ALL_TESTS()` should be invoked after the command line has been parsed by +[`InitGoogleTest()`](#InitGoogleTest). + +This function was formerly a macro; thus, it is in the global namespace and has +an all-caps name. + +### AssertionSuccess {#AssertionSuccess} + +`AssertionResult ::testing::AssertionSuccess()` + +Creates a successful assertion result. See +[`AssertionResult`](#AssertionResult). + +### AssertionFailure {#AssertionFailure} + +`AssertionResult ::testing::AssertionFailure()` + +Creates a failed assertion result. Use the `<<` operator to store a failure +message: + +```cpp +::testing::AssertionFailure() << "My failure message"; +``` + +See [`AssertionResult`](#AssertionResult). + +### StaticAssertTypeEq {#StaticAssertTypeEq} + +`::testing::StaticAssertTypeEq()` + +Compile-time assertion for type equality. Compiles if and only if `T1` and `T2` +are the same type. The value it returns is irrelevant. + +See [Type Assertions](../advanced.md#type-assertions) for more information. + +### PrintToString {#PrintToString} + +`std::string ::testing::PrintToString(x)` + +Prints any value `x` using GoogleTest's value printer. + +See +[Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values) +for more information. + +### PrintToStringParamName {#PrintToStringParamName} + +`std::string ::testing::PrintToStringParamName(TestParamInfo& info)` + +A built-in parameterized test name generator which returns the result of +[`PrintToString`](#PrintToString) called on `info.param`. Does not work when the +test parameter is a `std::string` or C string. See +[Specifying Names for Value-Parameterized Test Parameters](../advanced.md#specifying-names-for-value-parameterized-test-parameters) +for more information. + +See also [`TestParamInfo`](#TestParamInfo) and +[`INSTANTIATE_TEST_SUITE_P`](#INSTANTIATE_TEST_SUITE_P). diff --git a/_codeql_build_dir/_deps/googletest-src/docs/samples.md b/_codeql_build_dir/_deps/googletest-src/docs/samples.md new file mode 100644 index 0000000..2d97ca5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/docs/samples.md @@ -0,0 +1,22 @@ +# Googletest Samples + +If you're like us, you'd like to look at +[googletest samples.](https://github.com/google/googletest/tree/master/googletest/samples) +The sample directory has a number of well-commented samples showing how to use a +variety of googletest features. + +* Sample #1 shows the basic steps of using googletest to test C++ functions. +* Sample #2 shows a more complex unit test for a class with multiple member + functions. +* Sample #3 uses a test fixture. +* Sample #4 teaches you how to use googletest and `googletest.h` together to + get the best of both libraries. +* Sample #5 puts shared testing logic in a base test fixture, and reuses it in + derived fixtures. +* Sample #6 demonstrates type-parameterized tests. +* Sample #7 teaches the basics of value-parameterized tests. +* Sample #8 shows using `Combine()` in value-parameterized tests. +* Sample #9 shows use of the listener API to modify Google Test's console + output and the use of its reflection API to inspect test results. +* Sample #10 shows use of the listener API to implement a primitive memory + leak checker. diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/CMakeLists.txt b/_codeql_build_dir/_deps/googletest-src/googlemock/CMakeLists.txt new file mode 100644 index 0000000..e7df8ec --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/CMakeLists.txt @@ -0,0 +1,218 @@ +######################################################################## +# Note: CMake support is community-based. The maintainers do not use CMake +# internally. +# +# CMake build script for Google Mock. +# +# To run the tests for Google Mock itself on Linux, use 'make test' or +# ctest. You can select which tests to run using 'ctest -R regex'. +# For more options, run 'ctest --help'. + +option(gmock_build_tests "Build all of Google Mock's own tests." OFF) + +# A directory to find Google Test sources. +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt") + set(gtest_dir gtest) +else() + set(gtest_dir ../googletest) +endif() + +# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). +include("${gtest_dir}/cmake/hermetic_build.cmake" OPTIONAL) + +if (COMMAND pre_project_set_up_hermetic_build) + # Google Test also calls hermetic setup functions from add_subdirectory, + # although its changes will not affect things at the current scope. + pre_project_set_up_hermetic_build() +endif() + +######################################################################## +# +# Project-wide settings + +# Name of the project. +# +# CMake files in this project can refer to the root source directory +# as ${gmock_SOURCE_DIR} and to the root binary directory as +# ${gmock_BINARY_DIR}. +# Language "C" is required for find_package(Threads). +if (CMAKE_VERSION VERSION_LESS 3.0) + project(gmock CXX C) +else() + cmake_policy(SET CMP0048 NEW) + project(gmock VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C) +endif() +cmake_minimum_required(VERSION 2.8.12) + +if (COMMAND set_up_hermetic_build) + set_up_hermetic_build() +endif() + +# Instructs CMake to process Google Test's CMakeLists.txt and add its +# targets to the current scope. We are placing Google Test's binary +# directory in a subdirectory of our own as VC compilation may break +# if they are the same (the default). +add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/${gtest_dir}") + + +# These commands only run if this is the main project +if(CMAKE_PROJECT_NAME STREQUAL "gmock" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution") + # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to + # make it prominent in the GUI. + option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF) +else() + mark_as_advanced(gmock_build_tests) +endif() + +# Although Google Test's CMakeLists.txt calls this function, the +# changes there don't affect the current scope. Therefore we have to +# call it again here. +config_compiler_and_linker() # from ${gtest_dir}/cmake/internal_utils.cmake + +# Adds Google Mock's and Google Test's header directories to the search path. +set(gmock_build_include_dirs + "${gmock_SOURCE_DIR}/include" + "${gmock_SOURCE_DIR}" + "${gtest_SOURCE_DIR}/include" + # This directory is needed to build directly from Google Test sources. + "${gtest_SOURCE_DIR}") +include_directories(${gmock_build_include_dirs}) + +######################################################################## +# +# Defines the gmock & gmock_main libraries. User tests should link +# with one of them. + +# Google Mock libraries. We build them using more strict warnings than what +# are used for other targets, to ensure that Google Mock can be compiled by +# a user aggressive about warnings. +if (MSVC) + cxx_library(gmock + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc) + + cxx_library(gmock_main + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc + src/gmock_main.cc) +else() + cxx_library(gmock "${cxx_strict}" src/gmock-all.cc) + target_link_libraries(gmock PUBLIC gtest) + set_target_properties(gmock PROPERTIES VERSION ${GOOGLETEST_VERSION}) + cxx_library(gmock_main "${cxx_strict}" src/gmock_main.cc) + target_link_libraries(gmock_main PUBLIC gmock) + set_target_properties(gmock_main PROPERTIES VERSION ${GOOGLETEST_VERSION}) +endif() +# If the CMake version supports it, attach header directory information +# to the targets for when we are part of a parent build (ie being pulled +# in via add_subdirectory() rather than being a standalone build). +if (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") + target_include_directories(gmock SYSTEM INTERFACE + "$" + "$/${CMAKE_INSTALL_INCLUDEDIR}>") + target_include_directories(gmock_main SYSTEM INTERFACE + "$" + "$/${CMAKE_INSTALL_INCLUDEDIR}>") +endif() + +######################################################################## +# +# Install rules +install_project(gmock gmock_main) + +######################################################################## +# +# Google Mock's own tests. +# +# You can skip this section if you aren't interested in testing +# Google Mock itself. +# +# The tests are not built by default. To build them, set the +# gmock_build_tests option to ON. You can do it by running ccmake +# or specifying the -Dgmock_build_tests=ON flag when running cmake. + +if (gmock_build_tests) + # This must be set in the root directory for the tests to be run by + # 'make test' or ctest. + enable_testing() + + if (MINGW OR CYGWIN) + if (CMAKE_VERSION VERSION_LESS "2.8.12") + add_compile_options("-Wa,-mbig-obj") + else() + add_definitions("-Wa,-mbig-obj") + endif() + endif() + + ############################################################ + # C++ tests built with standard compiler flags. + + cxx_test(gmock-actions_test gmock_main) + cxx_test(gmock-cardinalities_test gmock_main) + cxx_test(gmock_ex_test gmock_main) + cxx_test(gmock-function-mocker_test gmock_main) + cxx_test(gmock-internal-utils_test gmock_main) + cxx_test(gmock-matchers_test gmock_main) + cxx_test(gmock-more-actions_test gmock_main) + cxx_test(gmock-nice-strict_test gmock_main) + cxx_test(gmock-port_test gmock_main) + cxx_test(gmock-spec-builders_test gmock_main) + cxx_test(gmock_link_test gmock_main test/gmock_link2_test.cc) + cxx_test(gmock_test gmock_main) + + if (DEFINED GTEST_HAS_PTHREAD) + cxx_test(gmock_stress_test gmock) + endif() + + # gmock_all_test is commented to save time building and running tests. + # Uncomment if necessary. + # cxx_test(gmock_all_test gmock_main) + + ############################################################ + # C++ tests built with non-standard compiler flags. + + if (MSVC) + cxx_library(gmock_main_no_exception "${cxx_no_exception}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + else() + cxx_library(gmock_main_no_exception "${cxx_no_exception}" src/gmock_main.cc) + target_link_libraries(gmock_main_no_exception PUBLIC gmock) + + cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" src/gmock_main.cc) + target_link_libraries(gmock_main_no_rtti PUBLIC gmock) + endif() + cxx_test_with_flags(gmock-more-actions_no_exception_test "${cxx_no_exception}" + gmock_main_no_exception test/gmock-more-actions_test.cc) + + cxx_test_with_flags(gmock_no_rtti_test "${cxx_no_rtti}" + gmock_main_no_rtti test/gmock-spec-builders_test.cc) + + cxx_shared_library(shared_gmock_main "${cxx_default}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + # Tests that a binary can be built with Google Mock as a shared library. On + # some system configurations, it may not possible to run the binary without + # knowing more details about the system configurations. We do not try to run + # this binary. To get a more robust shared library coverage, configure with + # -DBUILD_SHARED_LIBS=ON. + cxx_executable_with_flags(shared_gmock_test_ "${cxx_default}" + shared_gmock_main test/gmock-spec-builders_test.cc) + set_target_properties(shared_gmock_test_ + PROPERTIES + COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + + ############################################################ + # Python tests. + + cxx_executable(gmock_leak_test_ test gmock_main) + py_test(gmock_leak_test) + + cxx_executable(gmock_output_test_ test gmock) + py_test(gmock_output_test) +endif() diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/README.md b/_codeql_build_dir/_deps/googletest-src/googlemock/README.md new file mode 100644 index 0000000..ead6883 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/README.md @@ -0,0 +1,44 @@ +# Googletest Mocking (gMock) Framework + +### Overview + +Google's framework for writing and using C++ mock classes. It can help you +derive better designs of your system and write better tests. + +It is inspired by: + +* [jMock](http://www.jmock.org/) +* [EasyMock](http://www.easymock.org/) +* [Hamcrest](http://code.google.com/p/hamcrest/) + +It is designed with C++'s specifics in mind. + +gMock: + +- Provides a declarative syntax for defining mocks. +- Can define partial (hybrid) mocks, which are a cross of real and mock + objects. +- Handles functions of arbitrary types and overloaded functions. +- Comes with a rich set of matchers for validating function arguments. +- Uses an intuitive syntax for controlling the behavior of a mock. +- Does automatic verification of expectations (no record-and-replay needed). +- Allows arbitrary (partial) ordering constraints on function calls to be + expressed. +- Lets a user extend it by defining new matchers and actions. +- Does not use exceptions. +- Is easy to learn and use. + +Details and examples can be found here: + +* [gMock for Dummies](https://google.github.io/googletest/gmock_for_dummies.html) +* [Legacy gMock FAQ](https://google.github.io/googletest/gmock_faq.html) +* [gMock Cookbook](https://google.github.io/googletest/gmock_cook_book.html) +* [gMock Cheat Sheet](https://google.github.io/googletest/gmock_cheat_sheet.html) + +Please note that code under scripts/generator/ is from the +[cppclean project](http://code.google.com/p/cppclean/) and under the Apache +License, which is different from GoogleMock's license. + +GoogleMock is a part of +[GoogleTest C++ testing framework](http://github.com/google/googletest/) and a +subject to the same requirements. diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock.pc.in b/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock.pc.in new file mode 100644 index 0000000..23c67b5 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock.pc.in @@ -0,0 +1,10 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: gmock +Description: GoogleMock (without main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Requires: gtest = @PROJECT_VERSION@ +Libs: -L${libdir} -lgmock @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in b/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in new file mode 100644 index 0000000..66ffea7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/cmake/gmock_main.pc.in @@ -0,0 +1,10 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: gmock_main +Description: GoogleMock (with main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Requires: gmock = @PROJECT_VERSION@ +Libs: -L${libdir} -lgmock_main @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/docs/README.md b/_codeql_build_dir/_deps/googletest-src/googlemock/docs/README.md new file mode 100644 index 0000000..1bc57b7 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/docs/README.md @@ -0,0 +1,4 @@ +# Content Moved + +We are working on updates to the GoogleTest documentation, which has moved to +the top-level [docs](../../docs) directory. diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h new file mode 100644 index 0000000..f2393bd --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h @@ -0,0 +1,1687 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +// Google Mock - a framework for writing C++ mock classes. +// +// The ACTION* family of macros can be used in a namespace scope to +// define custom actions easily. The syntax: +// +// ACTION(name) { statements; } +// +// will define an action with the given name that executes the +// statements. The value returned by the statements will be used as +// the return value of the action. Inside the statements, you can +// refer to the K-th (0-based) argument of the mock function by +// 'argK', and refer to its type by 'argK_type'. For example: +// +// ACTION(IncrementArg1) { +// arg1_type temp = arg1; +// return ++(*temp); +// } +// +// allows you to write +// +// ...WillOnce(IncrementArg1()); +// +// You can also refer to the entire argument tuple and its type by +// 'args' and 'args_type', and refer to the mock function type and its +// return type by 'function_type' and 'return_type'. +// +// Note that you don't need to specify the types of the mock function +// arguments. However rest assured that your code is still type-safe: +// you'll get a compiler error if *arg1 doesn't support the ++ +// operator, or if the type of ++(*arg1) isn't compatible with the +// mock function's return type, for example. +// +// Sometimes you'll want to parameterize the action. For that you can use +// another macro: +// +// ACTION_P(name, param_name) { statements; } +// +// For example: +// +// ACTION_P(Add, n) { return arg0 + n; } +// +// will allow you to write: +// +// ...WillOnce(Add(5)); +// +// Note that you don't need to provide the type of the parameter +// either. If you need to reference the type of a parameter named +// 'foo', you can write 'foo_type'. For example, in the body of +// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type +// of 'n'. +// +// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support +// multi-parameter actions. +// +// For the purpose of typing, you can view +// +// ACTION_Pk(Foo, p1, ..., pk) { ... } +// +// as shorthand for +// +// template +// FooActionPk Foo(p1_type p1, ..., pk_type pk) { ... } +// +// In particular, you can provide the template type arguments +// explicitly when invoking Foo(), as in Foo(5, false); +// although usually you can rely on the compiler to infer the types +// for you automatically. You can assign the result of expression +// Foo(p1, ..., pk) to a variable of type FooActionPk. This can be useful when composing actions. +// +// You can also overload actions with different numbers of parameters: +// +// ACTION_P(Plus, a) { ... } +// ACTION_P2(Plus, a, b) { ... } +// +// While it's tempting to always use the ACTION* macros when defining +// a new action, you should also consider implementing ActionInterface +// or using MakePolymorphicAction() instead, especially if you need to +// use the action a lot. While these approaches require more work, +// they give you more control on the types of the mock function +// arguments and the action parameters, which in general leads to +// better compiler error messages that pay off in the long run. They +// also allow overloading actions based on parameter types (as opposed +// to just based on the number of parameters). +// +// CAVEAT: +// +// ACTION*() can only be used in a namespace scope as templates cannot be +// declared inside of a local class. +// Users can, however, define any local functors (e.g. a lambda) that +// can be used as actions. +// +// MORE INFORMATION: +// +// To learn more about using these macros, please search for 'ACTION' on +// https://github.com/google/googletest/blob/master/docs/gmock_cook_book.md + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ +#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ + +#ifndef _WIN32_WCE +# include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-port.h" +#include "gmock/internal/gmock-pp.h" + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable:4100) +#endif + +namespace testing { + +// To implement an action Foo, define: +// 1. a class FooAction that implements the ActionInterface interface, and +// 2. a factory function that creates an Action object from a +// const FooAction*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Action objects can now be copied like plain values. + +namespace internal { + +// BuiltInDefaultValueGetter::Get() returns a +// default-constructed T value. BuiltInDefaultValueGetter::Get() crashes with an error. +// +// This primary template is used when kDefaultConstructible is true. +template +struct BuiltInDefaultValueGetter { + static T Get() { return T(); } +}; +template +struct BuiltInDefaultValueGetter { + static T Get() { + Assert(false, __FILE__, __LINE__, + "Default action undefined for the function return type."); + return internal::Invalid(); + // The above statement will never be reached, but is required in + // order for this function to compile. + } +}; + +// BuiltInDefaultValue::Get() returns the "built-in" default value +// for type T, which is NULL when T is a raw pointer type, 0 when T is +// a numeric type, false when T is bool, or "" when T is string or +// std::string. In addition, in C++11 and above, it turns a +// default-constructed T value if T is default constructible. For any +// other type T, the built-in default T value is undefined, and the +// function will abort the process. +template +class BuiltInDefaultValue { + public: + // This function returns true if and only if type T has a built-in default + // value. + static bool Exists() { + return ::std::is_default_constructible::value; + } + + static T Get() { + return BuiltInDefaultValueGetter< + T, ::std::is_default_constructible::value>::Get(); + } +}; + +// This partial specialization says that we use the same built-in +// default value for T and const T. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return BuiltInDefaultValue::Exists(); } + static T Get() { return BuiltInDefaultValue::Get(); } +}; + +// This partial specialization defines the default values for pointer +// types. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return true; } + static T* Get() { return nullptr; } +}; + +// The following specializations define the default values for +// specific types we care about. +#define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \ + template <> \ + class BuiltInDefaultValue { \ + public: \ + static bool Exists() { return true; } \ + static type Get() { return value; } \ + } + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void, ); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::std::string, ""); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(bool, false); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(char, '\0'); + +// There's no need for a default action for signed wchar_t, as that +// type is the same as wchar_t for gcc, and invalid for MSVC. +// +// There's also no need for a default action for unsigned wchar_t, as +// that type is the same as unsigned int for gcc, and invalid for +// MSVC. +#if GMOCK_WCHAR_T_IS_NATIVE_ +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(wchar_t, 0U); // NOLINT +#endif + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned short, 0U); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed short, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned int, 0U); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed int, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long, 0UL); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long, 0L); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long long, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long long, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(float, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(double, 0); + +#undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_ + +// Simple two-arg form of std::disjunction. +template +using disjunction = typename ::std::conditional::type; + +} // namespace internal + +// When an unexpected function call is encountered, Google Mock will +// let it return a default value if the user has specified one for its +// return type, or if the return type has a built-in default value; +// otherwise Google Mock won't know what value to return and will have +// to abort the process. +// +// The DefaultValue class allows a user to specify the +// default value for a type T that is both copyable and publicly +// destructible (i.e. anything that can be used as a function return +// type). The usage is: +// +// // Sets the default value for type T to be foo. +// DefaultValue::Set(foo); +template +class DefaultValue { + public: + // Sets the default value for type T; requires T to be + // copy-constructable and have a public destructor. + static void Set(T x) { + delete producer_; + producer_ = new FixedValueProducer(x); + } + + // Provides a factory function to be called to generate the default value. + // This method can be used even if T is only move-constructible, but it is not + // limited to that case. + typedef T (*FactoryFunction)(); + static void SetFactory(FactoryFunction factory) { + delete producer_; + producer_ = new FactoryValueProducer(factory); + } + + // Unsets the default value for type T. + static void Clear() { + delete producer_; + producer_ = nullptr; + } + + // Returns true if and only if the user has set the default value for type T. + static bool IsSet() { return producer_ != nullptr; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T if the user has set one; + // otherwise returns the built-in default value. Requires that Exists() + // is true, which ensures that the return value is well-defined. + static T Get() { + return producer_ == nullptr ? internal::BuiltInDefaultValue::Get() + : producer_->Produce(); + } + + private: + class ValueProducer { + public: + virtual ~ValueProducer() {} + virtual T Produce() = 0; + }; + + class FixedValueProducer : public ValueProducer { + public: + explicit FixedValueProducer(T value) : value_(value) {} + T Produce() override { return value_; } + + private: + const T value_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(FixedValueProducer); + }; + + class FactoryValueProducer : public ValueProducer { + public: + explicit FactoryValueProducer(FactoryFunction factory) + : factory_(factory) {} + T Produce() override { return factory_(); } + + private: + const FactoryFunction factory_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(FactoryValueProducer); + }; + + static ValueProducer* producer_; +}; + +// This partial specialization allows a user to set default values for +// reference types. +template +class DefaultValue { + public: + // Sets the default value for type T&. + static void Set(T& x) { // NOLINT + address_ = &x; + } + + // Unsets the default value for type T&. + static void Clear() { address_ = nullptr; } + + // Returns true if and only if the user has set the default value for type T&. + static bool IsSet() { return address_ != nullptr; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T& if the user has set one; + // otherwise returns the built-in default value if there is one; + // otherwise aborts the process. + static T& Get() { + return address_ == nullptr ? internal::BuiltInDefaultValue::Get() + : *address_; + } + + private: + static T* address_; +}; + +// This specialization allows DefaultValue::Get() to +// compile. +template <> +class DefaultValue { + public: + static bool Exists() { return true; } + static void Get() {} +}; + +// Points to the user-set default value for type T. +template +typename DefaultValue::ValueProducer* DefaultValue::producer_ = nullptr; + +// Points to the user-set default value for type T&. +template +T* DefaultValue::address_ = nullptr; + +// Implement this interface to define an action for function type F. +template +class ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + ActionInterface() {} + virtual ~ActionInterface() {} + + // Performs the action. This method is not const, as in general an + // action can have side effects and be stateful. For example, a + // get-the-next-element-from-the-collection action will need to + // remember the current element. + virtual Result Perform(const ArgumentTuple& args) = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface); +}; + +// An Action is a copyable and IMMUTABLE (except by assignment) +// object that represents an action to be taken when a mock function +// of type F is called. The implementation of Action is just a +// std::shared_ptr to const ActionInterface. Don't inherit from Action! +// You can view an object implementing ActionInterface as a +// concrete action (including its current state), and an Action +// object as a handle to it. +template +class Action { + // Adapter class to allow constructing Action from a legacy ActionInterface. + // New code should create Actions from functors instead. + struct ActionAdapter { + // Adapter must be copyable to satisfy std::function requirements. + ::std::shared_ptr> impl_; + + template + typename internal::Function::Result operator()(Args&&... args) { + return impl_->Perform( + ::std::forward_as_tuple(::std::forward(args)...)); + } + }; + + template + using IsCompatibleFunctor = std::is_constructible, G>; + + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + // Constructs a null Action. Needed for storing Action objects in + // STL containers. + Action() {} + + // Construct an Action from a specified callable. + // This cannot take std::function directly, because then Action would not be + // directly constructible from lambda (it would require two conversions). + template < + typename G, + typename = typename std::enable_if, std::is_constructible, + G>>::value>::type> + Action(G&& fun) { // NOLINT + Init(::std::forward(fun), IsCompatibleFunctor()); + } + + // Constructs an Action from its implementation. + explicit Action(ActionInterface* impl) + : fun_(ActionAdapter{::std::shared_ptr>(impl)}) {} + + // This constructor allows us to turn an Action object into an + // Action, as long as F's arguments can be implicitly converted + // to Func's and Func's return type can be implicitly converted to F's. + template + explicit Action(const Action& action) : fun_(action.fun_) {} + + // Returns true if and only if this is the DoDefault() action. + bool IsDoDefault() const { return fun_ == nullptr; } + + // Performs the action. Note that this method is const even though + // the corresponding method in ActionInterface is not. The reason + // is that a const Action means that it cannot be re-bound to + // another concrete action, not that the concrete action it binds to + // cannot change state. (Think of the difference between a const + // pointer and a pointer to const.) + Result Perform(ArgumentTuple args) const { + if (IsDoDefault()) { + internal::IllegalDoDefault(__FILE__, __LINE__); + } + return internal::Apply(fun_, ::std::move(args)); + } + + private: + template + friend class Action; + + template + void Init(G&& g, ::std::true_type) { + fun_ = ::std::forward(g); + } + + template + void Init(G&& g, ::std::false_type) { + fun_ = IgnoreArgs::type>{::std::forward(g)}; + } + + template + struct IgnoreArgs { + template + Result operator()(const Args&...) const { + return function_impl(); + } + + FunctionImpl function_impl; + }; + + // fun_ is an empty function if and only if this is the DoDefault() action. + ::std::function fun_; +}; + +// The PolymorphicAction class template makes it easy to implement a +// polymorphic action (i.e. an action that can be used in mock +// functions of than one type, e.g. Return()). +// +// To define a polymorphic action, a user first provides a COPYABLE +// implementation class that has a Perform() method template: +// +// class FooAction { +// public: +// template +// Result Perform(const ArgumentTuple& args) const { +// // Processes the arguments and returns a result, using +// // std::get(args) to get the N-th (0-based) argument in the tuple. +// } +// ... +// }; +// +// Then the user creates the polymorphic action using +// MakePolymorphicAction(object) where object has type FooAction. See +// the definition of Return(void) and SetArgumentPointee(value) for +// complete examples. +template +class PolymorphicAction { + public: + explicit PolymorphicAction(const Impl& impl) : impl_(impl) {} + + template + operator Action() const { + return Action(new MonomorphicImpl(impl_)); + } + + private: + template + class MonomorphicImpl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} + + Result Perform(const ArgumentTuple& args) override { + return impl_.template Perform(args); + } + + private: + Impl impl_; + }; + + Impl impl_; +}; + +// Creates an Action from its implementation and returns it. The +// created Action object owns the implementation. +template +Action MakeAction(ActionInterface* impl) { + return Action(impl); +} + +// Creates a polymorphic action from its implementation. This is +// easier to use than the PolymorphicAction constructor as it +// doesn't require you to explicitly write the template argument, e.g. +// +// MakePolymorphicAction(foo); +// vs +// PolymorphicAction(foo); +template +inline PolymorphicAction MakePolymorphicAction(const Impl& impl) { + return PolymorphicAction(impl); +} + +namespace internal { + +// Helper struct to specialize ReturnAction to execute a move instead of a copy +// on return. Useful for move-only types, but could be used on any type. +template +struct ByMoveWrapper { + explicit ByMoveWrapper(T value) : payload(std::move(value)) {} + T payload; +}; + +// Implements the polymorphic Return(x) action, which can be used in +// any function that returns the type of x, regardless of the argument +// types. +// +// Note: The value passed into Return must be converted into +// Function::Result when this action is cast to Action rather than +// when that action is performed. This is important in scenarios like +// +// MOCK_METHOD1(Method, T(U)); +// ... +// { +// Foo foo; +// X x(&foo); +// EXPECT_CALL(mock, Method(_)).WillOnce(Return(x)); +// } +// +// In the example above the variable x holds reference to foo which leaves +// scope and gets destroyed. If copying X just copies a reference to foo, +// that copy will be left with a hanging reference. If conversion to T +// makes a copy of foo, the above code is safe. To support that scenario, we +// need to make sure that the type conversion happens inside the EXPECT_CALL +// statement, and conversion of the result of Return to Action is a +// good place for that. +// +// The real life example of the above scenario happens when an invocation +// of gtl::Container() is passed into Return. +// +template +class ReturnAction { + public: + // Constructs a ReturnAction object from the value to be returned. + // 'value' is passed by value instead of by const reference in order + // to allow Return("string literal") to compile. + explicit ReturnAction(R value) : value_(new R(std::move(value))) {} + + // This template type conversion operator allows Return(x) to be + // used in ANY function that returns x's type. + template + operator Action() const { // NOLINT + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename Function::Result Result; + GTEST_COMPILE_ASSERT_( + !std::is_reference::value, + use_ReturnRef_instead_of_Return_to_return_a_reference); + static_assert(!std::is_void::value, + "Can't use Return() on an action expected to return `void`."); + return Action(new Impl(value_)); + } + + private: + // Implements the Return(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + // The implicit cast is necessary when Result has more than one + // single-argument constructor (e.g. Result is std::vector) and R + // has a type conversion operator template. In that case, value_(value) + // won't compile as the compiler doesn't known which constructor of + // Result to call. ImplicitCast_ forces the compiler to convert R to + // Result without considering explicit constructors, thus resolving the + // ambiguity. value_ is then initialized using its copy constructor. + explicit Impl(const std::shared_ptr& value) + : value_before_cast_(*value), + value_(ImplicitCast_(value_before_cast_)) {} + + Result Perform(const ArgumentTuple&) override { return value_; } + + private: + GTEST_COMPILE_ASSERT_(!std::is_reference::value, + Result_cannot_be_a_reference_type); + // We save the value before casting just in case it is being cast to a + // wrapper type. + R value_before_cast_; + Result value_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl); + }; + + // Partially specialize for ByMoveWrapper. This version of ReturnAction will + // move its contents instead. + template + class Impl, F> : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const std::shared_ptr& wrapper) + : performed_(false), wrapper_(wrapper) {} + + Result Perform(const ArgumentTuple&) override { + GTEST_CHECK_(!performed_) + << "A ByMove() action should only be performed once."; + performed_ = true; + return std::move(wrapper_->payload); + } + + private: + bool performed_; + const std::shared_ptr wrapper_; + }; + + const std::shared_ptr value_; +}; + +// Implements the ReturnNull() action. +class ReturnNullAction { + public: + // Allows ReturnNull() to be used in any pointer-returning function. In C++11 + // this is enforced by returning nullptr, and in non-C++11 by asserting a + // pointer type on compile time. + template + static Result Perform(const ArgumentTuple&) { + return nullptr; + } +}; + +// Implements the Return() action. +class ReturnVoidAction { + public: + // Allows Return() to be used in any void-returning function. + template + static void Perform(const ArgumentTuple&) { + static_assert(std::is_void::value, "Result should be void."); + } +}; + +// Implements the polymorphic ReturnRef(x) action, which can be used +// in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefAction { + public: + // Constructs a ReturnRefAction object from the reference to be returned. + explicit ReturnRefAction(T& ref) : ref_(ref) {} // NOLINT + + // This template type conversion operator allows ReturnRef(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRef(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_(std::is_reference::value, + use_Return_instead_of_ReturnRef_to_return_a_value); + return Action(new Impl(ref_)); + } + + private: + // Implements the ReturnRef(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(T& ref) : ref_(ref) {} // NOLINT + + Result Perform(const ArgumentTuple&) override { return ref_; } + + private: + T& ref_; + }; + + T& ref_; +}; + +// Implements the polymorphic ReturnRefOfCopy(x) action, which can be +// used in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefOfCopyAction { + public: + // Constructs a ReturnRefOfCopyAction object from the reference to + // be returned. + explicit ReturnRefOfCopyAction(const T& value) : value_(value) {} // NOLINT + + // This template type conversion operator allows ReturnRefOfCopy(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRefOfCopy(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_( + std::is_reference::value, + use_Return_instead_of_ReturnRefOfCopy_to_return_a_value); + return Action(new Impl(value_)); + } + + private: + // Implements the ReturnRefOfCopy(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const T& value) : value_(value) {} // NOLINT + + Result Perform(const ArgumentTuple&) override { return value_; } + + private: + T value_; + }; + + const T value_; +}; + +// Implements the polymorphic ReturnRoundRobin(v) action, which can be +// used in any function that returns the element_type of v. +template +class ReturnRoundRobinAction { + public: + explicit ReturnRoundRobinAction(std::vector values) { + GTEST_CHECK_(!values.empty()) + << "ReturnRoundRobin requires at least one element."; + state_->values = std::move(values); + } + + template + T operator()(Args&&...) const { + return state_->Next(); + } + + private: + struct State { + T Next() { + T ret_val = values[i++]; + if (i == values.size()) i = 0; + return ret_val; + } + + std::vector values; + size_t i = 0; + }; + std::shared_ptr state_ = std::make_shared(); +}; + +// Implements the polymorphic DoDefault() action. +class DoDefaultAction { + public: + // This template type conversion operator allows DoDefault() to be + // used in any function. + template + operator Action() const { return Action(); } // NOLINT +}; + +// Implements the Assign action to set a given pointer referent to a +// particular value. +template +class AssignAction { + public: + AssignAction(T1* ptr, T2 value) : ptr_(ptr), value_(value) {} + + template + void Perform(const ArgumentTuple& /* args */) const { + *ptr_ = value_; + } + + private: + T1* const ptr_; + const T2 value_; +}; + +#if !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetErrnoAndReturn action to simulate return from +// various system calls and libc functions. +template +class SetErrnoAndReturnAction { + public: + SetErrnoAndReturnAction(int errno_value, T result) + : errno_(errno_value), + result_(result) {} + template + Result Perform(const ArgumentTuple& /* args */) const { + errno = errno_; + return result_; + } + + private: + const int errno_; + const T result_; +}; + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetArgumentPointee(x) action for any function +// whose N-th argument (0-based) is a pointer to x's type. +template +struct SetArgumentPointeeAction { + A value; + + template + void operator()(const Args&... args) const { + *::std::get(std::tie(args...)) = value; + } +}; + +// Implements the Invoke(object_ptr, &Class::Method) action. +template +struct InvokeMethodAction { + Class* const obj_ptr; + const MethodPtr method_ptr; + + template + auto operator()(Args&&... args) const + -> decltype((obj_ptr->*method_ptr)(std::forward(args)...)) { + return (obj_ptr->*method_ptr)(std::forward(args)...); + } +}; + +// Implements the InvokeWithoutArgs(f) action. The template argument +// FunctionImpl is the implementation type of f, which can be either a +// function pointer or a functor. InvokeWithoutArgs(f) can be used as an +// Action as long as f's type is compatible with F. +template +struct InvokeWithoutArgsAction { + FunctionImpl function_impl; + + // Allows InvokeWithoutArgs(f) to be used as any action whose type is + // compatible with f. + template + auto operator()(const Args&...) -> decltype(function_impl()) { + return function_impl(); + } +}; + +// Implements the InvokeWithoutArgs(object_ptr, &Class::Method) action. +template +struct InvokeMethodWithoutArgsAction { + Class* const obj_ptr; + const MethodPtr method_ptr; + + using ReturnType = + decltype((std::declval()->*std::declval())()); + + template + ReturnType operator()(const Args&...) const { + return (obj_ptr->*method_ptr)(); + } +}; + +// Implements the IgnoreResult(action) action. +template +class IgnoreResultAction { + public: + explicit IgnoreResultAction(const A& action) : action_(action) {} + + template + operator Action() const { + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename internal::Function::Result Result; + + // Asserts at compile time that F returns void. + static_assert(std::is_void::value, "Result type should be void."); + + return Action(new Impl(action_)); + } + + private: + template + class Impl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const A& action) : action_(action) {} + + void Perform(const ArgumentTuple& args) override { + // Performs the action and ignores its result. + action_.Perform(args); + } + + private: + // Type OriginalFunction is the same as F except that its return + // type is IgnoredValue. + typedef typename internal::Function::MakeResultIgnoredValue + OriginalFunction; + + const Action action_; + }; + + const A action_; +}; + +template +struct WithArgsAction { + InnerAction action; + + // The inner action could be anything convertible to Action. + // We use the conversion operator to detect the signature of the inner Action. + template + operator Action() const { // NOLINT + using TupleType = std::tuple; + Action::type...)> + converted(action); + + return [converted](Args... args) -> R { + return converted.Perform(std::forward_as_tuple( + std::get(std::forward_as_tuple(std::forward(args)...))...)); + }; + } +}; + +template +struct DoAllAction { + private: + template + using NonFinalType = + typename std::conditional::value, T, const T&>::type; + + template + std::vector Convert(IndexSequence) const { + return {ActionT(std::get(actions))...}; + } + + public: + std::tuple actions; + + template + operator Action() const { // NOLINT + struct Op { + std::vector...)>> converted; + Action last; + R operator()(Args... args) const { + auto tuple_args = std::forward_as_tuple(std::forward(args)...); + for (auto& a : converted) { + a.Perform(tuple_args); + } + return last.Perform(std::move(tuple_args)); + } + }; + return Op{Convert...)>>( + MakeIndexSequence()), + std::get(actions)}; + } +}; + +template +struct ReturnNewAction { + T* operator()() const { + return internal::Apply( + [](const Params&... unpacked_params) { + return new T(unpacked_params...); + }, + params); + } + std::tuple params; +}; + +template +struct ReturnArgAction { + template + auto operator()(const Args&... args) const -> + typename std::tuple_element>::type { + return std::get(std::tie(args...)); + } +}; + +template +struct SaveArgAction { + Ptr pointer; + + template + void operator()(const Args&... args) const { + *pointer = std::get(std::tie(args...)); + } +}; + +template +struct SaveArgPointeeAction { + Ptr pointer; + + template + void operator()(const Args&... args) const { + *pointer = *std::get(std::tie(args...)); + } +}; + +template +struct SetArgRefereeAction { + T value; + + template + void operator()(Args&&... args) const { + using argk_type = + typename ::std::tuple_element>::type; + static_assert(std::is_lvalue_reference::value, + "Argument must be a reference type."); + std::get(std::tie(args...)) = value; + } +}; + +template +struct SetArrayArgumentAction { + I1 first; + I2 last; + + template + void operator()(const Args&... args) const { + auto value = std::get(std::tie(args...)); + for (auto it = first; it != last; ++it, (void)++value) { + *value = *it; + } + } +}; + +template +struct DeleteArgAction { + template + void operator()(const Args&... args) const { + delete std::get(std::tie(args...)); + } +}; + +template +struct ReturnPointeeAction { + Ptr pointer; + template + auto operator()(const Args&...) const -> decltype(*pointer) { + return *pointer; + } +}; + +#if GTEST_HAS_EXCEPTIONS +template +struct ThrowAction { + T exception; + // We use a conversion operator to adapt to any return type. + template + operator Action() const { // NOLINT + T copy = exception; + return [copy](Args...) -> R { throw copy; }; + } +}; +#endif // GTEST_HAS_EXCEPTIONS + +} // namespace internal + +// An Unused object can be implicitly constructed from ANY value. +// This is handy when defining actions that ignore some or all of the +// mock function arguments. For example, given +// +// MOCK_METHOD3(Foo, double(const string& label, double x, double y)); +// MOCK_METHOD3(Bar, double(int index, double x, double y)); +// +// instead of +// +// double DistanceToOriginWithLabel(const string& label, double x, double y) { +// return sqrt(x*x + y*y); +// } +// double DistanceToOriginWithIndex(int index, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXPECT_CALL(mock, Foo("abc", _, _)) +// .WillOnce(Invoke(DistanceToOriginWithLabel)); +// EXPECT_CALL(mock, Bar(5, _, _)) +// .WillOnce(Invoke(DistanceToOriginWithIndex)); +// +// you could write +// +// // We can declare any uninteresting argument as Unused. +// double DistanceToOrigin(Unused, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXPECT_CALL(mock, Foo("abc", _, _)).WillOnce(Invoke(DistanceToOrigin)); +// EXPECT_CALL(mock, Bar(5, _, _)).WillOnce(Invoke(DistanceToOrigin)); +typedef internal::IgnoredValue Unused; + +// Creates an action that does actions a1, a2, ..., sequentially in +// each invocation. All but the last action will have a readonly view of the +// arguments. +template +internal::DoAllAction::type...> DoAll( + Action&&... action) { + return {std::forward_as_tuple(std::forward(action)...)}; +} + +// WithArg(an_action) creates an action that passes the k-th +// (0-based) argument of the mock function to an_action and performs +// it. It adapts an action accepting one argument to one that accepts +// multiple arguments. For convenience, we also provide +// WithArgs(an_action) (defined below) as a synonym. +template +internal::WithArgsAction::type, k> +WithArg(InnerAction&& action) { + return {std::forward(action)}; +} + +// WithArgs(an_action) creates an action that passes +// the selected arguments of the mock function to an_action and +// performs it. It serves as an adaptor between actions with +// different argument lists. +template +internal::WithArgsAction::type, k, ks...> +WithArgs(InnerAction&& action) { + return {std::forward(action)}; +} + +// WithoutArgs(inner_action) can be used in a mock function with a +// non-empty argument list to perform inner_action, which takes no +// argument. In other words, it adapts an action accepting no +// argument to one that accepts (and ignores) arguments. +template +internal::WithArgsAction::type> +WithoutArgs(InnerAction&& action) { + return {std::forward(action)}; +} + +// Creates an action that returns 'value'. 'value' is passed by value +// instead of const reference - otherwise Return("string literal") +// will trigger a compiler error about using array as initializer. +template +internal::ReturnAction Return(R value) { + return internal::ReturnAction(std::move(value)); +} + +// Creates an action that returns NULL. +inline PolymorphicAction ReturnNull() { + return MakePolymorphicAction(internal::ReturnNullAction()); +} + +// Creates an action that returns from a void function. +inline PolymorphicAction Return() { + return MakePolymorphicAction(internal::ReturnVoidAction()); +} + +// Creates an action that returns the reference to a variable. +template +inline internal::ReturnRefAction ReturnRef(R& x) { // NOLINT + return internal::ReturnRefAction(x); +} + +// Prevent using ReturnRef on reference to temporary. +template +internal::ReturnRefAction ReturnRef(R&&) = delete; + +// Creates an action that returns the reference to a copy of the +// argument. The copy is created when the action is constructed and +// lives as long as the action. +template +inline internal::ReturnRefOfCopyAction ReturnRefOfCopy(const R& x) { + return internal::ReturnRefOfCopyAction(x); +} + +// Modifies the parent action (a Return() action) to perform a move of the +// argument instead of a copy. +// Return(ByMove()) actions can only be executed once and will assert this +// invariant. +template +internal::ByMoveWrapper ByMove(R x) { + return internal::ByMoveWrapper(std::move(x)); +} + +// Creates an action that returns an element of `vals`. Calling this action will +// repeatedly return the next value from `vals` until it reaches the end and +// will restart from the beginning. +template +internal::ReturnRoundRobinAction ReturnRoundRobin(std::vector vals) { + return internal::ReturnRoundRobinAction(std::move(vals)); +} + +// Creates an action that returns an element of `vals`. Calling this action will +// repeatedly return the next value from `vals` until it reaches the end and +// will restart from the beginning. +template +internal::ReturnRoundRobinAction ReturnRoundRobin( + std::initializer_list vals) { + return internal::ReturnRoundRobinAction(std::vector(vals)); +} + +// Creates an action that does the default action for the give mock function. +inline internal::DoDefaultAction DoDefault() { + return internal::DoDefaultAction(); +} + +// Creates an action that sets the variable pointed by the N-th +// (0-based) function argument to 'value'. +template +internal::SetArgumentPointeeAction SetArgPointee(T value) { + return {std::move(value)}; +} + +// The following version is DEPRECATED. +template +internal::SetArgumentPointeeAction SetArgumentPointee(T value) { + return {std::move(value)}; +} + +// Creates an action that sets a pointer referent to a given value. +template +PolymorphicAction > Assign(T1* ptr, T2 val) { + return MakePolymorphicAction(internal::AssignAction(ptr, val)); +} + +#if !GTEST_OS_WINDOWS_MOBILE + +// Creates an action that sets errno and returns the appropriate error. +template +PolymorphicAction > +SetErrnoAndReturn(int errval, T result) { + return MakePolymorphicAction( + internal::SetErrnoAndReturnAction(errval, result)); +} + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Various overloads for Invoke(). + +// Legacy function. +// Actions can now be implicitly constructed from callables. No need to create +// wrapper objects. +// This function exists for backwards compatibility. +template +typename std::decay::type Invoke(FunctionImpl&& function_impl) { + return std::forward(function_impl); +} + +// Creates an action that invokes the given method on the given object +// with the mock function's arguments. +template +internal::InvokeMethodAction Invoke(Class* obj_ptr, + MethodPtr method_ptr) { + return {obj_ptr, method_ptr}; +} + +// Creates an action that invokes 'function_impl' with no argument. +template +internal::InvokeWithoutArgsAction::type> +InvokeWithoutArgs(FunctionImpl function_impl) { + return {std::move(function_impl)}; +} + +// Creates an action that invokes the given method on the given object +// with no argument. +template +internal::InvokeMethodWithoutArgsAction InvokeWithoutArgs( + Class* obj_ptr, MethodPtr method_ptr) { + return {obj_ptr, method_ptr}; +} + +// Creates an action that performs an_action and throws away its +// result. In other words, it changes the return type of an_action to +// void. an_action MUST NOT return void, or the code won't compile. +template +inline internal::IgnoreResultAction IgnoreResult(const A& an_action) { + return internal::IgnoreResultAction(an_action); +} + +// Creates a reference wrapper for the given L-value. If necessary, +// you can explicitly specify the type of the reference. For example, +// suppose 'derived' is an object of type Derived, ByRef(derived) +// would wrap a Derived&. If you want to wrap a const Base& instead, +// where Base is a base class of Derived, just write: +// +// ByRef(derived) +// +// N.B. ByRef is redundant with std::ref, std::cref and std::reference_wrapper. +// However, it may still be used for consistency with ByMove(). +template +inline ::std::reference_wrapper ByRef(T& l_value) { // NOLINT + return ::std::reference_wrapper(l_value); +} + +// The ReturnNew(a1, a2, ..., a_k) action returns a pointer to a new +// instance of type T, constructed on the heap with constructor arguments +// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. +template +internal::ReturnNewAction::type...> ReturnNew( + Params&&... params) { + return {std::forward_as_tuple(std::forward(params)...)}; +} + +// Action ReturnArg() returns the k-th argument of the mock function. +template +internal::ReturnArgAction ReturnArg() { + return {}; +} + +// Action SaveArg(pointer) saves the k-th (0-based) argument of the +// mock function to *pointer. +template +internal::SaveArgAction SaveArg(Ptr pointer) { + return {pointer}; +} + +// Action SaveArgPointee(pointer) saves the value pointed to +// by the k-th (0-based) argument of the mock function to *pointer. +template +internal::SaveArgPointeeAction SaveArgPointee(Ptr pointer) { + return {pointer}; +} + +// Action SetArgReferee(value) assigns 'value' to the variable +// referenced by the k-th (0-based) argument of the mock function. +template +internal::SetArgRefereeAction::type> SetArgReferee( + T&& value) { + return {std::forward(value)}; +} + +// Action SetArrayArgument(first, last) copies the elements in +// source range [first, last) to the array pointed to by the k-th +// (0-based) argument, which can be either a pointer or an +// iterator. The action does not take ownership of the elements in the +// source range. +template +internal::SetArrayArgumentAction SetArrayArgument(I1 first, + I2 last) { + return {first, last}; +} + +// Action DeleteArg() deletes the k-th (0-based) argument of the mock +// function. +template +internal::DeleteArgAction DeleteArg() { + return {}; +} + +// This action returns the value pointed to by 'pointer'. +template +internal::ReturnPointeeAction ReturnPointee(Ptr pointer) { + return {pointer}; +} + +// Action Throw(exception) can be used in a mock function of any type +// to throw the given exception. Any copyable value can be thrown. +#if GTEST_HAS_EXCEPTIONS +template +internal::ThrowAction::type> Throw(T&& exception) { + return {std::forward(exception)}; +} +#endif // GTEST_HAS_EXCEPTIONS + +namespace internal { + +// A macro from the ACTION* family (defined later in gmock-generated-actions.h) +// defines an action that can be used in a mock function. Typically, +// these actions only care about a subset of the arguments of the mock +// function. For example, if such an action only uses the second +// argument, it can be used in any mock function that takes >= 2 +// arguments where the type of the second argument is compatible. +// +// Therefore, the action implementation must be prepared to take more +// arguments than it needs. The ExcessiveArg type is used to +// represent those excessive arguments. In order to keep the compiler +// error messages tractable, we define it in the testing namespace +// instead of testing::internal. However, this is an INTERNAL TYPE +// and subject to change without notice, so a user MUST NOT USE THIS +// TYPE DIRECTLY. +struct ExcessiveArg {}; + +// Builds an implementation of an Action<> for some particular signature, using +// a class defined by an ACTION* macro. +template struct ActionImpl; + +template +struct ImplBase { + struct Holder { + // Allows each copy of the Action<> to get to the Impl. + explicit operator const Impl&() const { return *ptr; } + std::shared_ptr ptr; + }; + using type = typename std::conditional::value, + Impl, Holder>::type; +}; + +template +struct ActionImpl : ImplBase::type { + using Base = typename ImplBase::type; + using function_type = R(Args...); + using args_type = std::tuple; + + ActionImpl() = default; // Only defined if appropriate for Base. + explicit ActionImpl(std::shared_ptr impl) : Base{std::move(impl)} { } + + R operator()(Args&&... arg) const { + static constexpr size_t kMaxArgs = + sizeof...(Args) <= 10 ? sizeof...(Args) : 10; + return Apply(MakeIndexSequence{}, + MakeIndexSequence<10 - kMaxArgs>{}, + args_type{std::forward(arg)...}); + } + + template + R Apply(IndexSequence, IndexSequence, + const args_type& args) const { + // Impl need not be specific to the signature of action being implemented; + // only the implementing function body needs to have all of the specific + // types instantiated. Up to 10 of the args that are provided by the + // args_type get passed, followed by a dummy of unspecified type for the + // remainder up to 10 explicit args. + static constexpr ExcessiveArg kExcessArg{}; + return static_cast(*this).template gmock_PerformImpl< + /*function_type=*/function_type, /*return_type=*/R, + /*args_type=*/args_type, + /*argN_type=*/typename std::tuple_element::type...>( + /*args=*/args, std::get(args)..., + ((void)excess_id, kExcessArg)...); + } +}; + +// Stores a default-constructed Impl as part of the Action<>'s +// std::function<>. The Impl should be trivial to copy. +template +::testing::Action MakeAction() { + return ::testing::Action(ActionImpl()); +} + +// Stores just the one given instance of Impl. +template +::testing::Action MakeAction(std::shared_ptr impl) { + return ::testing::Action(ActionImpl(std::move(impl))); +} + +#define GMOCK_INTERNAL_ARG_UNUSED(i, data, el) \ + , const arg##i##_type& arg##i GTEST_ATTRIBUTE_UNUSED_ +#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_ \ + const args_type& args GTEST_ATTRIBUTE_UNUSED_ GMOCK_PP_REPEAT( \ + GMOCK_INTERNAL_ARG_UNUSED, , 10) + +#define GMOCK_INTERNAL_ARG(i, data, el) , const arg##i##_type& arg##i +#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_ \ + const args_type& args GMOCK_PP_REPEAT(GMOCK_INTERNAL_ARG, , 10) + +#define GMOCK_INTERNAL_TEMPLATE_ARG(i, data, el) , typename arg##i##_type +#define GMOCK_ACTION_TEMPLATE_ARGS_NAMES_ \ + GMOCK_PP_TAIL(GMOCK_PP_REPEAT(GMOCK_INTERNAL_TEMPLATE_ARG, , 10)) + +#define GMOCK_INTERNAL_TYPENAME_PARAM(i, data, param) , typename param##_type +#define GMOCK_ACTION_TYPENAME_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPENAME_PARAM, , params)) + +#define GMOCK_INTERNAL_TYPE_PARAM(i, data, param) , param##_type +#define GMOCK_ACTION_TYPE_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_PARAM, , params)) + +#define GMOCK_INTERNAL_TYPE_GVALUE_PARAM(i, data, param) \ + , param##_type gmock_p##i +#define GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_GVALUE_PARAM, , params)) + +#define GMOCK_INTERNAL_GVALUE_PARAM(i, data, param) \ + , std::forward(gmock_p##i) +#define GMOCK_ACTION_GVALUE_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GVALUE_PARAM, , params)) + +#define GMOCK_INTERNAL_INIT_PARAM(i, data, param) \ + , param(::std::forward(gmock_p##i)) +#define GMOCK_ACTION_INIT_PARAMS_(params) \ + GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_INIT_PARAM, , params)) + +#define GMOCK_INTERNAL_FIELD_PARAM(i, data, param) param##_type param; +#define GMOCK_ACTION_FIELD_PARAMS_(params) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_FIELD_PARAM, , params) + +#define GMOCK_INTERNAL_ACTION(name, full_name, params) \ + template \ + class full_name { \ + public: \ + explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \ + : impl_(std::make_shared( \ + GMOCK_ACTION_GVALUE_PARAMS_(params))) { } \ + full_name(const full_name&) = default; \ + full_name(full_name&&) noexcept = default; \ + template \ + operator ::testing::Action() const { \ + return ::testing::internal::MakeAction(impl_); \ + } \ + private: \ + class gmock_Impl { \ + public: \ + explicit gmock_Impl(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \ + : GMOCK_ACTION_INIT_PARAMS_(params) {} \ + template \ + return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ + GMOCK_ACTION_FIELD_PARAMS_(params) \ + }; \ + std::shared_ptr impl_; \ + }; \ + template \ + inline full_name name( \ + GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) { \ + return full_name( \ + GMOCK_ACTION_GVALUE_PARAMS_(params)); \ + } \ + template \ + template \ + return_type full_name::gmock_Impl:: \ + gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +} // namespace internal + +// Similar to GMOCK_INTERNAL_ACTION, but no bound parameters are stored. +#define ACTION(name) \ + class name##Action { \ + public: \ + explicit name##Action() noexcept {} \ + name##Action(const name##Action&) noexcept {} \ + template \ + operator ::testing::Action() const { \ + return ::testing::internal::MakeAction(); \ + } \ + private: \ + class gmock_Impl { \ + public: \ + template \ + return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ + }; \ + }; \ + inline name##Action name() GTEST_MUST_USE_RESULT_; \ + inline name##Action name() { return name##Action(); } \ + template \ + return_type name##Action::gmock_Impl::gmock_PerformImpl( \ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP, (__VA_ARGS__)) + +#define ACTION_P2(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP2, (__VA_ARGS__)) + +#define ACTION_P3(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP3, (__VA_ARGS__)) + +#define ACTION_P4(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP4, (__VA_ARGS__)) + +#define ACTION_P5(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP5, (__VA_ARGS__)) + +#define ACTION_P6(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP6, (__VA_ARGS__)) + +#define ACTION_P7(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP7, (__VA_ARGS__)) + +#define ACTION_P8(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP8, (__VA_ARGS__)) + +#define ACTION_P9(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP9, (__VA_ARGS__)) + +#define ACTION_P10(name, ...) \ + GMOCK_INTERNAL_ACTION(name, name##ActionP10, (__VA_ARGS__)) + +} // namespace testing + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h new file mode 100644 index 0000000..fc7f803 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-cardinalities.h @@ -0,0 +1,157 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used cardinalities. More +// cardinalities can be defined by the user implementing the +// CardinalityInterface interface if necessary. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ +#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ + +#include +#include +#include // NOLINT +#include "gmock/internal/gmock-port.h" +#include "gtest/gtest.h" + +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + +namespace testing { + +// To implement a cardinality Foo, define: +// 1. a class FooCardinality that implements the +// CardinalityInterface interface, and +// 2. a factory function that creates a Cardinality object from a +// const FooCardinality*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Cardinality objects can now be copied like plain values. + +// The implementation of a cardinality. +class CardinalityInterface { + public: + virtual ~CardinalityInterface() {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + virtual int ConservativeLowerBound() const { return 0; } + virtual int ConservativeUpperBound() const { return INT_MAX; } + + // Returns true if and only if call_count calls will satisfy this + // cardinality. + virtual bool IsSatisfiedByCallCount(int call_count) const = 0; + + // Returns true if and only if call_count calls will saturate this + // cardinality. + virtual bool IsSaturatedByCallCount(int call_count) const = 0; + + // Describes self to an ostream. + virtual void DescribeTo(::std::ostream* os) const = 0; +}; + +// A Cardinality is a copyable and IMMUTABLE (except by assignment) +// object that specifies how many times a mock function is expected to +// be called. The implementation of Cardinality is just a std::shared_ptr +// to const CardinalityInterface. Don't inherit from Cardinality! +class GTEST_API_ Cardinality { + public: + // Constructs a null cardinality. Needed for storing Cardinality + // objects in STL containers. + Cardinality() {} + + // Constructs a Cardinality from its implementation. + explicit Cardinality(const CardinalityInterface* impl) : impl_(impl) {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + int ConservativeLowerBound() const { return impl_->ConservativeLowerBound(); } + int ConservativeUpperBound() const { return impl_->ConservativeUpperBound(); } + + // Returns true if and only if call_count calls will satisfy this + // cardinality. + bool IsSatisfiedByCallCount(int call_count) const { + return impl_->IsSatisfiedByCallCount(call_count); + } + + // Returns true if and only if call_count calls will saturate this + // cardinality. + bool IsSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count); + } + + // Returns true if and only if call_count calls will over-saturate this + // cardinality, i.e. exceed the maximum number of allowed calls. + bool IsOverSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count) && + !impl_->IsSatisfiedByCallCount(call_count); + } + + // Describes self to an ostream + void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + // Describes the given actual call count to an ostream. + static void DescribeActualCallCountTo(int actual_call_count, + ::std::ostream* os); + + private: + std::shared_ptr impl_; +}; + +// Creates a cardinality that allows at least n calls. +GTEST_API_ Cardinality AtLeast(int n); + +// Creates a cardinality that allows at most n calls. +GTEST_API_ Cardinality AtMost(int n); + +// Creates a cardinality that allows any number of calls. +GTEST_API_ Cardinality AnyNumber(); + +// Creates a cardinality that allows between min and max calls. +GTEST_API_ Cardinality Between(int min, int max); + +// Creates a cardinality that allows exactly n calls. +GTEST_API_ Cardinality Exactly(int n); + +// Creates a cardinality from its implementation. +inline Cardinality MakeCardinality(const CardinalityInterface* c) { + return Cardinality(c); +} + +} // namespace testing + +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + +#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h new file mode 100644 index 0000000..0fc6f6f --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-function-mocker.h @@ -0,0 +1,479 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements MOCK_METHOD. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ // NOLINT +#define GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ // NOLINT + +#include // IWYU pragma: keep +#include // IWYU pragma: keep + +#include "gmock/gmock-spec-builders.h" +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-pp.h" + +namespace testing { +namespace internal { +template +using identity_t = T; + +template +struct ThisRefAdjuster { + template + using AdjustT = typename std::conditional< + std::is_const::type>::value, + typename std::conditional::value, + const T&, const T&&>::type, + typename std::conditional::value, T&, + T&&>::type>::type; + + template + static AdjustT Adjust(const MockType& mock) { + return static_cast>(const_cast(mock)); + } +}; + +} // namespace internal + +// The style guide prohibits "using" statements in a namespace scope +// inside a header file. However, the FunctionMocker class template +// is meant to be defined in the ::testing namespace. The following +// line is just a trick for working around a bug in MSVC 8.0, which +// cannot handle it if we define FunctionMocker in ::testing. +using internal::FunctionMocker; +} // namespace testing + +#define MOCK_METHOD(...) \ + GMOCK_PP_VARIADIC_CALL(GMOCK_INTERNAL_MOCK_METHOD_ARG_, __VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_1(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_2(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_3(_Ret, _MethodName, _Args) \ + GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, ()) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_4(_Ret, _MethodName, _Args, _Spec) \ + GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Args); \ + GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Spec); \ + GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ + GMOCK_PP_NARG0 _Args, GMOCK_INTERNAL_SIGNATURE(_Ret, _Args)); \ + GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ + GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ + GMOCK_PP_NARG0 _Args, _MethodName, GMOCK_INTERNAL_HAS_CONST(_Spec), \ + GMOCK_INTERNAL_HAS_OVERRIDE(_Spec), GMOCK_INTERNAL_HAS_FINAL(_Spec), \ + GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Spec), \ + GMOCK_INTERNAL_GET_CALLTYPE(_Spec), GMOCK_INTERNAL_GET_REF_SPEC(_Spec), \ + (GMOCK_INTERNAL_SIGNATURE(_Ret, _Args))) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_5(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_6(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHOD_ARG_7(...) \ + GMOCK_INTERNAL_WRONG_ARITY(__VA_ARGS__) + +#define GMOCK_INTERNAL_WRONG_ARITY(...) \ + static_assert( \ + false, \ + "MOCK_METHOD must be called with 3 or 4 arguments. _Ret, " \ + "_MethodName, _Args and optionally _Spec. _Args and _Spec must be " \ + "enclosed in parentheses. If _Ret is a type with unprotected commas, " \ + "it must also be enclosed in parentheses.") + +#define GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Tuple) \ + static_assert( \ + GMOCK_PP_IS_ENCLOSED_PARENS(_Tuple), \ + GMOCK_PP_STRINGIZE(_Tuple) " should be enclosed in parentheses.") + +#define GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE(_N, ...) \ + static_assert( \ + std::is_function<__VA_ARGS__>::value, \ + "Signature must be a function type, maybe return type contains " \ + "unprotected comma."); \ + static_assert( \ + ::testing::tuple_size::ArgumentTuple>::value == _N, \ + "This method does not take " GMOCK_PP_STRINGIZE( \ + _N) " arguments. Parenthesize all types with unprotected commas.") + +#define GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT, ~, _Spec) + +#define GMOCK_INTERNAL_MOCK_METHOD_IMPL(_N, _MethodName, _Constness, \ + _Override, _Final, _NoexceptSpec, \ + _CallType, _RefSpec, _Signature) \ + typename ::testing::internal::Function::Result \ + GMOCK_INTERNAL_EXPAND(_CallType) \ + _MethodName(GMOCK_PP_REPEAT(GMOCK_INTERNAL_PARAMETER, _Signature, _N)) \ + GMOCK_PP_IF(_Constness, const, ) _RefSpec _NoexceptSpec \ + GMOCK_PP_IF(_Override, override, ) GMOCK_PP_IF(_Final, final, ) { \ + GMOCK_MOCKER_(_N, _Constness, _MethodName) \ + .SetOwnerAndName(this, #_MethodName); \ + return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ + .Invoke(GMOCK_PP_REPEAT(GMOCK_INTERNAL_FORWARD_ARG, _Signature, _N)); \ + } \ + ::testing::MockSpec gmock_##_MethodName( \ + GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_PARAMETER, _Signature, _N)) \ + GMOCK_PP_IF(_Constness, const, ) _RefSpec { \ + GMOCK_MOCKER_(_N, _Constness, _MethodName).RegisterOwner(this); \ + return GMOCK_MOCKER_(_N, _Constness, _MethodName) \ + .With(GMOCK_PP_REPEAT(GMOCK_INTERNAL_MATCHER_ARGUMENT, , _N)); \ + } \ + ::testing::MockSpec gmock_##_MethodName( \ + const ::testing::internal::WithoutMatchers&, \ + GMOCK_PP_IF(_Constness, const, )::testing::internal::Function< \ + GMOCK_PP_REMOVE_PARENS(_Signature)>*) const _RefSpec _NoexceptSpec { \ + return ::testing::internal::ThisRefAdjuster::Adjust(*this) \ + .gmock_##_MethodName(GMOCK_PP_REPEAT( \ + GMOCK_INTERNAL_A_MATCHER_ARGUMENT, _Signature, _N)); \ + } \ + mutable ::testing::FunctionMocker \ + GMOCK_MOCKER_(_N, _Constness, _MethodName) + +#define GMOCK_INTERNAL_EXPAND(...) __VA_ARGS__ + +// Five Valid modifiers. +#define GMOCK_INTERNAL_HAS_CONST(_Tuple) \ + GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_CONST, ~, _Tuple)) + +#define GMOCK_INTERNAL_HAS_OVERRIDE(_Tuple) \ + GMOCK_PP_HAS_COMMA( \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_OVERRIDE, ~, _Tuple)) + +#define GMOCK_INTERNAL_HAS_FINAL(_Tuple) \ + GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_FINAL, ~, _Tuple)) + +#define GMOCK_INTERNAL_GET_NOEXCEPT_SPEC(_Tuple) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT, ~, _Tuple) + +#define GMOCK_INTERNAL_NOEXCEPT_SPEC_IF_NOEXCEPT(_i, _, _elem) \ + GMOCK_PP_IF( \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)), \ + _elem, ) + +#define GMOCK_INTERNAL_GET_REF_SPEC(_Tuple) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_REF_SPEC_IF_REF, ~, _Tuple) + +#define GMOCK_INTERNAL_REF_SPEC_IF_REF(_i, _, _elem) \ + GMOCK_PP_IF(GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)), \ + GMOCK_PP_CAT(GMOCK_INTERNAL_UNPACK_, _elem), ) + +#define GMOCK_INTERNAL_GET_CALLTYPE(_Tuple) \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_CALLTYPE_IMPL, ~, _Tuple) + +#define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \ + static_assert( \ + (GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)) + \ + GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_REF(_i, _, _elem)) + \ + GMOCK_INTERNAL_IS_CALLTYPE(_elem)) == 1, \ + GMOCK_PP_STRINGIZE( \ + _elem) " cannot be recognized as a valid specification modifier."); + +// Modifiers implementation. +#define GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CONST_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_CONST_I_const , + +#define GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_OVERRIDE_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_OVERRIDE_I_override , + +#define GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_FINAL_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_FINAL_I_final , + +#define GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_NOEXCEPT_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_NOEXCEPT_I_noexcept , + +#define GMOCK_INTERNAL_DETECT_REF(_i, _, _elem) \ + GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_REF_I_, _elem) + +#define GMOCK_INTERNAL_DETECT_REF_I_ref , + +#define GMOCK_INTERNAL_UNPACK_ref(x) x + +#define GMOCK_INTERNAL_GET_CALLTYPE_IMPL(_i, _, _elem) \ + GMOCK_PP_IF(GMOCK_INTERNAL_IS_CALLTYPE(_elem), \ + GMOCK_INTERNAL_GET_VALUE_CALLTYPE, GMOCK_PP_EMPTY) \ + (_elem) + +// TODO(iserna): GMOCK_INTERNAL_IS_CALLTYPE and +// GMOCK_INTERNAL_GET_VALUE_CALLTYPE needed more expansions to work on windows +// maybe they can be simplified somehow. +#define GMOCK_INTERNAL_IS_CALLTYPE(_arg) \ + GMOCK_INTERNAL_IS_CALLTYPE_I( \ + GMOCK_PP_CAT(GMOCK_INTERNAL_IS_CALLTYPE_HELPER_, _arg)) +#define GMOCK_INTERNAL_IS_CALLTYPE_I(_arg) GMOCK_PP_IS_ENCLOSED_PARENS(_arg) + +#define GMOCK_INTERNAL_GET_VALUE_CALLTYPE(_arg) \ + GMOCK_INTERNAL_GET_VALUE_CALLTYPE_I( \ + GMOCK_PP_CAT(GMOCK_INTERNAL_IS_CALLTYPE_HELPER_, _arg)) +#define GMOCK_INTERNAL_GET_VALUE_CALLTYPE_I(_arg) \ + GMOCK_PP_IDENTITY _arg + +#define GMOCK_INTERNAL_IS_CALLTYPE_HELPER_Calltype + +// Note: The use of `identity_t` here allows _Ret to represent return types that +// would normally need to be specified in a different way. For example, a method +// returning a function pointer must be written as +// +// fn_ptr_return_t (*method(method_args_t...))(fn_ptr_args_t...) +// +// But we only support placing the return type at the beginning. To handle this, +// we wrap all calls in identity_t, so that a declaration will be expanded to +// +// identity_t method(method_args_t...) +// +// This allows us to work around the syntactic oddities of function/method +// types. +#define GMOCK_INTERNAL_SIGNATURE(_Ret, _Args) \ + ::testing::internal::identity_t( \ + GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_TYPE, _, _Args)) + +#define GMOCK_INTERNAL_GET_TYPE(_i, _, _elem) \ + GMOCK_PP_COMMA_IF(_i) \ + GMOCK_PP_IF(GMOCK_PP_IS_BEGIN_PARENS(_elem), GMOCK_PP_REMOVE_PARENS, \ + GMOCK_PP_IDENTITY) \ + (_elem) + +#define GMOCK_INTERNAL_PARAMETER(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + GMOCK_INTERNAL_ARG_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ + gmock_a##_i + +#define GMOCK_INTERNAL_FORWARD_ARG(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + ::std::forward(gmock_a##_i) + +#define GMOCK_INTERNAL_MATCHER_PARAMETER(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + GMOCK_INTERNAL_MATCHER_O(_i, GMOCK_PP_REMOVE_PARENS(_Signature)) \ + gmock_a##_i + +#define GMOCK_INTERNAL_MATCHER_ARGUMENT(_i, _1, _2) \ + GMOCK_PP_COMMA_IF(_i) \ + gmock_a##_i + +#define GMOCK_INTERNAL_A_MATCHER_ARGUMENT(_i, _Signature, _) \ + GMOCK_PP_COMMA_IF(_i) \ + ::testing::A() + +#define GMOCK_INTERNAL_ARG_O(_i, ...) \ + typename ::testing::internal::Function<__VA_ARGS__>::template Arg<_i>::type + +#define GMOCK_INTERNAL_MATCHER_O(_i, ...) \ + const ::testing::Matcher::template Arg<_i>::type>& + +#define MOCK_METHOD0(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 0, __VA_ARGS__) +#define MOCK_METHOD1(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 1, __VA_ARGS__) +#define MOCK_METHOD2(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 2, __VA_ARGS__) +#define MOCK_METHOD3(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 3, __VA_ARGS__) +#define MOCK_METHOD4(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 4, __VA_ARGS__) +#define MOCK_METHOD5(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 5, __VA_ARGS__) +#define MOCK_METHOD6(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 6, __VA_ARGS__) +#define MOCK_METHOD7(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 7, __VA_ARGS__) +#define MOCK_METHOD8(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 8, __VA_ARGS__) +#define MOCK_METHOD9(m, ...) GMOCK_INTERNAL_MOCK_METHODN(, , m, 9, __VA_ARGS__) +#define MOCK_METHOD10(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, , m, 10, __VA_ARGS__) + +#define MOCK_CONST_METHOD0(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 0, __VA_ARGS__) +#define MOCK_CONST_METHOD1(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 1, __VA_ARGS__) +#define MOCK_CONST_METHOD2(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 2, __VA_ARGS__) +#define MOCK_CONST_METHOD3(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 3, __VA_ARGS__) +#define MOCK_CONST_METHOD4(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 4, __VA_ARGS__) +#define MOCK_CONST_METHOD5(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 5, __VA_ARGS__) +#define MOCK_CONST_METHOD6(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 6, __VA_ARGS__) +#define MOCK_CONST_METHOD7(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 7, __VA_ARGS__) +#define MOCK_CONST_METHOD8(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 8, __VA_ARGS__) +#define MOCK_CONST_METHOD9(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 9, __VA_ARGS__) +#define MOCK_CONST_METHOD10(m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, , m, 10, __VA_ARGS__) + +#define MOCK_METHOD0_T(m, ...) MOCK_METHOD0(m, __VA_ARGS__) +#define MOCK_METHOD1_T(m, ...) MOCK_METHOD1(m, __VA_ARGS__) +#define MOCK_METHOD2_T(m, ...) MOCK_METHOD2(m, __VA_ARGS__) +#define MOCK_METHOD3_T(m, ...) MOCK_METHOD3(m, __VA_ARGS__) +#define MOCK_METHOD4_T(m, ...) MOCK_METHOD4(m, __VA_ARGS__) +#define MOCK_METHOD5_T(m, ...) MOCK_METHOD5(m, __VA_ARGS__) +#define MOCK_METHOD6_T(m, ...) MOCK_METHOD6(m, __VA_ARGS__) +#define MOCK_METHOD7_T(m, ...) MOCK_METHOD7(m, __VA_ARGS__) +#define MOCK_METHOD8_T(m, ...) MOCK_METHOD8(m, __VA_ARGS__) +#define MOCK_METHOD9_T(m, ...) MOCK_METHOD9(m, __VA_ARGS__) +#define MOCK_METHOD10_T(m, ...) MOCK_METHOD10(m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_T(m, ...) MOCK_CONST_METHOD0(m, __VA_ARGS__) +#define MOCK_CONST_METHOD1_T(m, ...) MOCK_CONST_METHOD1(m, __VA_ARGS__) +#define MOCK_CONST_METHOD2_T(m, ...) MOCK_CONST_METHOD2(m, __VA_ARGS__) +#define MOCK_CONST_METHOD3_T(m, ...) MOCK_CONST_METHOD3(m, __VA_ARGS__) +#define MOCK_CONST_METHOD4_T(m, ...) MOCK_CONST_METHOD4(m, __VA_ARGS__) +#define MOCK_CONST_METHOD5_T(m, ...) MOCK_CONST_METHOD5(m, __VA_ARGS__) +#define MOCK_CONST_METHOD6_T(m, ...) MOCK_CONST_METHOD6(m, __VA_ARGS__) +#define MOCK_CONST_METHOD7_T(m, ...) MOCK_CONST_METHOD7(m, __VA_ARGS__) +#define MOCK_CONST_METHOD8_T(m, ...) MOCK_CONST_METHOD8(m, __VA_ARGS__) +#define MOCK_CONST_METHOD9_T(m, ...) MOCK_CONST_METHOD9(m, __VA_ARGS__) +#define MOCK_CONST_METHOD10_T(m, ...) MOCK_CONST_METHOD10(m, __VA_ARGS__) + +#define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 0, __VA_ARGS__) +#define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 1, __VA_ARGS__) +#define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 2, __VA_ARGS__) +#define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 3, __VA_ARGS__) +#define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 4, __VA_ARGS__) +#define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 5, __VA_ARGS__) +#define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 6, __VA_ARGS__) +#define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 7, __VA_ARGS__) +#define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 8, __VA_ARGS__) +#define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 9, __VA_ARGS__) +#define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(, ct, m, 10, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 0, __VA_ARGS__) +#define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 1, __VA_ARGS__) +#define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 2, __VA_ARGS__) +#define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 3, __VA_ARGS__) +#define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 4, __VA_ARGS__) +#define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 5, __VA_ARGS__) +#define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 6, __VA_ARGS__) +#define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 7, __VA_ARGS__) +#define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 8, __VA_ARGS__) +#define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 9, __VA_ARGS__) +#define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_INTERNAL_MOCK_METHODN(const, ct, m, 10, __VA_ARGS__) + +#define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ + MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, __VA_ARGS__) + +#define GMOCK_INTERNAL_MOCK_METHODN(constness, ct, Method, args_num, ...) \ + GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE( \ + args_num, ::testing::internal::identity_t<__VA_ARGS__>); \ + GMOCK_INTERNAL_MOCK_METHOD_IMPL( \ + args_num, Method, GMOCK_PP_NARG0(constness), 0, 0, , ct, , \ + (::testing::internal::identity_t<__VA_ARGS__>)) + +#define GMOCK_MOCKER_(arity, constness, Method) \ + GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) + +#endif // GOOGLEMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_FUNCTION_MOCKER_H_ diff --git a/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h new file mode 100644 index 0000000..86be9c1 --- /dev/null +++ b/_codeql_build_dir/_deps/googletest-src/googlemock/include/gmock/gmock-matchers.h @@ -0,0 +1,5392 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +// Google Mock - a framework for writing C++ mock classes. +// +// The MATCHER* family of macros can be used in a namespace scope to +// define custom matchers easily. +// +// Basic Usage +// =========== +// +// The syntax +// +// MATCHER(name, description_string) { statements; } +// +// defines a matcher with the given name that executes the statements, +// which must return a bool to indicate if the match succeeds. Inside +// the statements, you can refer to the value being matched by 'arg', +// and refer to its type by 'arg_type'. +// +// The description string documents what the matcher does, and is used +// to generate the failure message when the match fails. Since a +// MATCHER() is usually defined in a header file shared by multiple +// C++ source files, we require the description to be a C-string +// literal to avoid possible side effects. It can be empty, in which +// case we'll use the sequence of words in the matcher name as the +// description. +// +// For example: +// +// MATCHER(IsEven, "") { return (arg % 2) == 0; } +// +// allows you to write +// +// // Expects mock_foo.Bar(n) to be called where n is even. +// EXPECT_CALL(mock_foo, Bar(IsEven())); +// +// or, +// +// // Verifies that the value of some_expression is even. +// EXPECT_THAT(some_expression, IsEven()); +// +// If the above assertion fails, it will print something like: +// +// Value of: some_expression +// Expected: is even +// Actual: 7 +// +// where the description "is even" is automatically calculated from the +// matcher name IsEven. +// +// Argument Type +// ============= +// +// Note that the type of the value being matched (arg_type) is +// determined by the context in which you use the matcher and is +// supplied to you by the compiler, so you don't need to worry about +// declaring it (nor can you). This allows the matcher to be +// polymorphic. For example, IsEven() can be used to match any type +// where the value of "(arg % 2) == 0" can be implicitly converted to +// a bool. In the "Bar(IsEven())" example above, if method Bar() +// takes an int, 'arg_type' will be int; if it takes an unsigned long, +// 'arg_type' will be unsigned long; and so on. +// +// Parameterizing Matchers +// ======================= +// +// Sometimes you'll want to parameterize the matcher. For that you +// can use another macro: +// +// MATCHER_P(name, param_name, description_string) { statements; } +// +// For example: +// +// MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } +// +// will allow you to write: +// +// EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); +// +// which may lead to this message (assuming n is 10): +// +// Value of: Blah("a") +// Expected: has absolute value 10 +// Actual: -9 +// +// Note that both the matcher description and its parameter are +// printed, making the message human-friendly. +// +// In the matcher definition body, you can write 'foo_type' to +// reference the type of a parameter named 'foo'. For example, in the +// body of MATCHER_P(HasAbsoluteValue, value) above, you can write +// 'value_type' to refer to the type of 'value'. +// +// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P$n to +// support multi-parameter matchers. +// +// Describing Parameterized Matchers +// ================================= +// +// The last argument to MATCHER*() is a string-typed expression. The +// expression can reference all of the matcher's parameters and a +// special bool-typed variable named 'negation'. When 'negation' is +// false, the expression should evaluate to the matcher's description; +// otherwise it should evaluate to the description of the negation of +// the matcher. For example, +// +// using testing::PrintToString; +// +// MATCHER_P2(InClosedRange, low, hi, +// std::string(negation ? "is not" : "is") + " in range [" + +// PrintToString(low) + ", " + PrintToString(hi) + "]") { +// return low <= arg && arg <= hi; +// } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: is in range [4, 6] +// ... +// Expected: is not in range [2, 4] +// +// If you specify "" as the description, the failure message will +// contain the sequence of words in the matcher name followed by the +// parameter values printed as a tuple. For example, +// +// MATCHER_P2(InClosedRange, low, hi, "") { ... } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: in closed range (4, 6) +// ... +// Expected: not (in closed range (2, 4)) +// +// Types of Matcher Parameters +// =========================== +// +// For the purpose of typing, you can view +// +// MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } +// +// as shorthand for +// +// template +// FooMatcherPk +// Foo(p1_type p1, ..., pk_type pk) { ... } +// +// When you write Foo(v1, ..., vk), the compiler infers the types of +// the parameters v1, ..., and vk for you. If you are not happy with +// the result of the type inference, you can specify the types by +// explicitly instantiating the template, as in Foo(5, +// false). As said earlier, you don't get to (or need to) specify +// 'arg_type' as that's determined by the context in which the matcher +// is used. You can assign the result of expression Foo(p1, ..., pk) +// to a variable of type FooMatcherPk. This +// can be useful when composing matchers. +// +// While you can instantiate a matcher template with reference types, +// passing the parameters by pointer usually makes your code more +// readable. If, however, you still want to pass a parameter by +// reference, be aware that in the failure message generated by the +// matcher you will see the value of the referenced object but not its +// address. +// +// Explaining Match Results +// ======================== +// +// Sometimes the matcher description alone isn't enough to explain why +// the match has failed or succeeded. For example, when expecting a +// long string, it can be very helpful to also print the diff between +// the expected string and the actual one. To achieve that, you can +// optionally stream additional information to a special variable +// named result_listener, whose type is a pointer to class +// MatchResultListener: +// +// MATCHER_P(EqualsLongString, str, "") { +// if (arg == str) return true; +// +// *result_listener << "the difference: " +/// << DiffStrings(str, arg); +// return false; +// } +// +// Overloading Matchers +// ==================== +// +// You can overload matchers with different numbers of parameters: +// +// MATCHER_P(Blah, a, description_string1) { ... } +// MATCHER_P2(Blah, a, b, description_string2) { ... } +// +// Caveats +// ======= +// +// When defining a new matcher, you should also consider implementing +// MatcherInterface or using MakePolymorphicMatcher(). These +// approaches require more work than the MATCHER* macros, but also +// give you more control on the types of the value being matched and +// the matcher parameters, which may leads to better compiler error +// messages when the matcher is used wrong. They also allow +// overloading matchers based on parameter types (as opposed to just +// based on the number of parameters). +// +// MATCHER*() can only be used in a namespace scope as templates cannot be +// declared inside of a local class. +// +// More Information +// ================ +// +// To learn more about using these macros, please search for 'MATCHER' +// on +// https://github.com/google/googletest/blob/master/docs/gmock_cook_book.md +// +// This file also implements some commonly used argument matchers. More +// matchers can be defined by the user implementing the +// MatcherInterface interface if necessary. +// +// See googletest/include/gtest/gtest-matchers.h for the definition of class +// Matcher, class MatcherInterface, and others. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ +#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ + +#include +#include +#include +#include +#include +#include +#include // NOLINT +#include +#include +#include +#include +#include + +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-port.h" +#include "gmock/internal/gmock-pp.h" +#include "gtest/gtest.h" + +// MSVC warning C5046 is new as of VS2017 version 15.8. +#if defined(_MSC_VER) && _MSC_VER >= 1915 +#define GMOCK_MAYBE_5046_ 5046 +#else +#define GMOCK_MAYBE_5046_ +#endif + +GTEST_DISABLE_MSC_WARNINGS_PUSH_( + 4251 GMOCK_MAYBE_5046_ /* class A needs to have dll-interface to be used by + clients of class B */ + /* Symbol involving type with internal linkage not defined */) + +namespace testing { + +// To implement a matcher Foo for type T, define: +// 1. a class FooMatcherImpl that implements the +// MatcherInterface interface, and +// 2. a factory function that creates a Matcher object from a +// FooMatcherImpl*. +// +// The two-level delegation design makes it possible to allow a user +// to write "v" instead of "Eq(v)" where a Matcher is expected, which +// is impossible if we pass matchers by pointers. It also eases +// ownership management as Matcher objects can now be copied like +// plain values. + +// A match result listener that stores the explanation in a string. +class StringMatchResultListener : public MatchResultListener { + public: + StringMatchResultListener() : MatchResultListener(&ss_) {} + + // Returns the explanation accumulated so far. + std::string str() const { return ss_.str(); } + + // Clears the explanation accumulated so far. + void Clear() { ss_.str(""); } + + private: + ::std::stringstream ss_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(StringMatchResultListener); +}; + +// Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION +// and MUST NOT BE USED IN USER CODE!!! +namespace internal { + +// The MatcherCastImpl class template is a helper for implementing +// MatcherCast(). We need this helper in order to partially +// specialize the implementation of MatcherCast() (C++ allows +// class/struct templates to be partially specialized, but not +// function templates.). + +// This general version is used when MatcherCast()'s argument is a +// polymorphic matcher (i.e. something that can be converted to a +// Matcher but is not one yet; for example, Eq(value)) or a value (for +// example, "hello"). +template +class MatcherCastImpl { + public: + static Matcher Cast(const M& polymorphic_matcher_or_value) { + // M can be a polymorphic matcher, in which case we want to use + // its conversion operator to create Matcher. Or it can be a value + // that should be passed to the Matcher's constructor. + // + // We can't call Matcher(polymorphic_matcher_or_value) when M is a + // polymorphic matcher because it'll be ambiguous if T has an implicit + // constructor from M (this usually happens when T has an implicit + // constructor from any type). + // + // It won't work to unconditionally implicit_cast + // polymorphic_matcher_or_value to Matcher because it won't trigger + // a user-defined conversion from M to T if one exists (assuming M is + // a value). + return CastImpl(polymorphic_matcher_or_value, + std::is_convertible>{}, + std::is_convertible{}); + } + + private: + template + static Matcher CastImpl(const M& polymorphic_matcher_or_value, + std::true_type /* convertible_to_matcher */, + std::integral_constant) { + // M is implicitly convertible to Matcher, which means that either + // M is a polymorphic matcher or Matcher has an implicit constructor + // from M. In both cases using the implicit conversion will produce a + // matcher. + // + // Even if T has an implicit constructor from M, it won't be called because + // creating Matcher would require a chain of two user-defined conversions + // (first to create T from M and then to create Matcher from T). + return polymorphic_matcher_or_value; + } + + // M can't be implicitly converted to Matcher, so M isn't a polymorphic + // matcher. It's a value of a type implicitly convertible to T. Use direct + // initialization to create a matcher. + static Matcher CastImpl(const M& value, + std::false_type /* convertible_to_matcher */, + std::true_type /* convertible_to_T */) { + return Matcher(ImplicitCast_(value)); + } + + // M can't be implicitly converted to either Matcher or T. Attempt to use + // polymorphic matcher Eq(value) in this case. + // + // Note that we first attempt to perform an implicit cast on the value and + // only fall back to the polymorphic Eq() matcher afterwards because the + // latter calls bool operator==(const Lhs& lhs, const Rhs& rhs) in the end + // which might be undefined even when Rhs is implicitly convertible to Lhs + // (e.g. std::pair vs. std::pair). + // + // We don't define this method inline as we need the declaration of Eq(). + static Matcher CastImpl(const M& value, + std::false_type /* convertible_to_matcher */, + std::false_type /* convertible_to_T */); +}; + +// This more specialized version is used when MatcherCast()'s argument +// is already a Matcher. This only compiles when type T can be +// statically converted to type U. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& source_matcher) { + return Matcher(new Impl(source_matcher)); + } + + private: + class Impl : public MatcherInterface { + public: + explicit Impl(const Matcher& source_matcher) + : source_matcher_(source_matcher) {} + + // We delegate the matching logic to the source matcher. + bool MatchAndExplain(T x, MatchResultListener* listener) const override { + using FromType = typename std::remove_cv::type>::type>::type; + using ToType = typename std::remove_cv::type>::type>::type; + // Do not allow implicitly converting base*/& to derived*/&. + static_assert( + // Do not trigger if only one of them is a pointer. That implies a + // regular conversion and not a down_cast. + (std::is_pointer::type>::value != + std::is_pointer::type>::value) || + std::is_same::value || + !std::is_base_of::value, + "Can't implicitly convert from to "); + + // Do the cast to `U` explicitly if necessary. + // Otherwise, let implicit conversions do the trick. + using CastType = + typename std::conditional::value, + T&, U>::type; + + return source_matcher_.MatchAndExplain(static_cast(x), + listener); + } + + void DescribeTo(::std::ostream* os) const override { + source_matcher_.DescribeTo(os); + } + + void DescribeNegationTo(::std::ostream* os) const override { + source_matcher_.DescribeNegationTo(os); + } + + private: + const Matcher source_matcher_; + }; +}; + +// This even more specialized version is used for efficiently casting +// a matcher to its own type. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& matcher) { return matcher; } +}; + +// Template specialization for parameterless Matcher. +template +class MatcherBaseImpl { + public: + MatcherBaseImpl() = default; + + template + operator ::testing::Matcher() const { // NOLINT(runtime/explicit) + return ::testing::Matcher(new + typename Derived::template gmock_Impl()); + } +}; + +// Template specialization for Matcher with parameters. +template