@nxtedition/rocksdb 15.2.2 → 15.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1707) hide show
  1. package/.claude/settings.local.json +15 -1
  2. package/binding.cc +186 -128
  3. package/binding.gyp +32 -113
  4. package/build.sh +3 -0
  5. package/deps/rocksdb/rocksdb.gyp +3 -1
  6. package/index.js +3 -5
  7. package/package.json +1 -1
  8. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  9. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  10. package/util.h +62 -63
  11. package/deps/abseil-cpp/BUILD.bazel +0 -35
  12. package/deps/abseil-cpp/CMake/AbseilDll.cmake +0 -938
  13. package/deps/abseil-cpp/CMake/AbseilHelpers.cmake +0 -465
  14. package/deps/abseil-cpp/CMake/Googletest/CMakeLists.txt.in +0 -14
  15. package/deps/abseil-cpp/CMake/Googletest/DownloadGTest.cmake +0 -41
  16. package/deps/abseil-cpp/CMake/abslConfig.cmake.in +0 -8
  17. package/deps/abseil-cpp/CMake/install_test_project/CMakeLists.txt +0 -25
  18. package/deps/abseil-cpp/CMake/install_test_project/simple.cc +0 -32
  19. package/deps/abseil-cpp/CMake/install_test_project/test.sh +0 -113
  20. package/deps/abseil-cpp/CMakeLists.txt +0 -280
  21. package/deps/abseil-cpp/LICENSE +0 -203
  22. package/deps/abseil-cpp/MODULE.bazel +0 -43
  23. package/deps/abseil-cpp/PrivacyInfo.xcprivacy +0 -14
  24. package/deps/abseil-cpp/absl/BUILD.bazel +0 -62
  25. package/deps/abseil-cpp/absl/CMakeLists.txt +0 -45
  26. package/deps/abseil-cpp/absl/abseil.podspec.gen.py +0 -245
  27. package/deps/abseil-cpp/absl/algorithm/BUILD.bazel +0 -92
  28. package/deps/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -72
  29. package/deps/abseil-cpp/absl/algorithm/algorithm.h +0 -64
  30. package/deps/abseil-cpp/absl/algorithm/algorithm_test.cc +0 -60
  31. package/deps/abseil-cpp/absl/algorithm/container.h +0 -1864
  32. package/deps/abseil-cpp/absl/algorithm/container_test.cc +0 -2232
  33. package/deps/abseil-cpp/absl/base/BUILD.bazel +0 -1036
  34. package/deps/abseil-cpp/absl/base/CMakeLists.txt +0 -881
  35. package/deps/abseil-cpp/absl/base/attributes.h +0 -1081
  36. package/deps/abseil-cpp/absl/base/attributes_test.cc +0 -43
  37. package/deps/abseil-cpp/absl/base/bit_cast_test.cc +0 -109
  38. package/deps/abseil-cpp/absl/base/c_header_test.c +0 -30
  39. package/deps/abseil-cpp/absl/base/call_once.h +0 -228
  40. package/deps/abseil-cpp/absl/base/call_once_test.cc +0 -107
  41. package/deps/abseil-cpp/absl/base/casts.cc +0 -61
  42. package/deps/abseil-cpp/absl/base/casts.h +0 -313
  43. package/deps/abseil-cpp/absl/base/casts_test.cc +0 -148
  44. package/deps/abseil-cpp/absl/base/config.h +0 -854
  45. package/deps/abseil-cpp/absl/base/config_test.cc +0 -60
  46. package/deps/abseil-cpp/absl/base/const_init.h +0 -76
  47. package/deps/abseil-cpp/absl/base/dynamic_annotations.h +0 -480
  48. package/deps/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -958
  49. package/deps/abseil-cpp/absl/base/fast_type_id.h +0 -73
  50. package/deps/abseil-cpp/absl/base/fast_type_id_test.cc +0 -130
  51. package/deps/abseil-cpp/absl/base/internal/atomic_hook.h +0 -200
  52. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test.cc +0 -97
  53. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.cc +0 -32
  54. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.h +0 -34
  55. package/deps/abseil-cpp/absl/base/internal/cmake_thread_test.cc +0 -22
  56. package/deps/abseil-cpp/absl/base/internal/cycleclock.cc +0 -72
  57. package/deps/abseil-cpp/absl/base/internal/cycleclock.h +0 -144
  58. package/deps/abseil-cpp/absl/base/internal/cycleclock_config.h +0 -55
  59. package/deps/abseil-cpp/absl/base/internal/direct_mmap.h +0 -170
  60. package/deps/abseil-cpp/absl/base/internal/dynamic_annotations.h +0 -398
  61. package/deps/abseil-cpp/absl/base/internal/endian.h +0 -279
  62. package/deps/abseil-cpp/absl/base/internal/endian_test.cc +0 -263
  63. package/deps/abseil-cpp/absl/base/internal/errno_saver.h +0 -43
  64. package/deps/abseil-cpp/absl/base/internal/errno_saver_test.cc +0 -45
  65. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.cc +0 -79
  66. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.h +0 -1109
  67. package/deps/abseil-cpp/absl/base/internal/exception_testing.h +0 -42
  68. package/deps/abseil-cpp/absl/base/internal/hide_ptr.h +0 -51
  69. package/deps/abseil-cpp/absl/base/internal/iterator_traits.h +0 -75
  70. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test.cc +0 -85
  71. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +0 -97
  72. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.cc +0 -661
  73. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.h +0 -133
  74. package/deps/abseil-cpp/absl/base/internal/low_level_alloc_test.cc +0 -180
  75. package/deps/abseil-cpp/absl/base/internal/low_level_scheduling.h +0 -134
  76. package/deps/abseil-cpp/absl/base/internal/nullability_traits.h +0 -71
  77. package/deps/abseil-cpp/absl/base/internal/nullability_traits_test.cc +0 -98
  78. package/deps/abseil-cpp/absl/base/internal/per_thread_tls.h +0 -52
  79. package/deps/abseil-cpp/absl/base/internal/poison.cc +0 -85
  80. package/deps/abseil-cpp/absl/base/internal/poison.h +0 -59
  81. package/deps/abseil-cpp/absl/base/internal/poison_test.cc +0 -41
  82. package/deps/abseil-cpp/absl/base/internal/pretty_function.h +0 -33
  83. package/deps/abseil-cpp/absl/base/internal/raw_logging.cc +0 -279
  84. package/deps/abseil-cpp/absl/base/internal/raw_logging.h +0 -217
  85. package/deps/abseil-cpp/absl/base/internal/scheduling_mode.h +0 -58
  86. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.cc +0 -81
  87. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.h +0 -45
  88. package/deps/abseil-cpp/absl/base/internal/scoped_set_env_test.cc +0 -99
  89. package/deps/abseil-cpp/absl/base/internal/spinlock.cc +0 -225
  90. package/deps/abseil-cpp/absl/base/internal/spinlock.h +0 -310
  91. package/deps/abseil-cpp/absl/base/internal/spinlock_akaros.inc +0 -35
  92. package/deps/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +0 -80
  93. package/deps/abseil-cpp/absl/base/internal/spinlock_linux.inc +0 -71
  94. package/deps/abseil-cpp/absl/base/internal/spinlock_posix.inc +0 -46
  95. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.cc +0 -81
  96. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.h +0 -95
  97. package/deps/abseil-cpp/absl/base/internal/spinlock_win32.inc +0 -40
  98. package/deps/abseil-cpp/absl/base/internal/strerror.cc +0 -88
  99. package/deps/abseil-cpp/absl/base/internal/strerror.h +0 -39
  100. package/deps/abseil-cpp/absl/base/internal/strerror_benchmark.cc +0 -29
  101. package/deps/abseil-cpp/absl/base/internal/strerror_test.cc +0 -89
  102. package/deps/abseil-cpp/absl/base/internal/sysinfo.cc +0 -494
  103. package/deps/abseil-cpp/absl/base/internal/sysinfo.h +0 -74
  104. package/deps/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -82
  105. package/deps/abseil-cpp/absl/base/internal/thread_identity.cc +0 -163
  106. package/deps/abseil-cpp/absl/base/internal/thread_identity.h +0 -273
  107. package/deps/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +0 -38
  108. package/deps/abseil-cpp/absl/base/internal/thread_identity_test.cc +0 -129
  109. package/deps/abseil-cpp/absl/base/internal/throw_delegate.cc +0 -203
  110. package/deps/abseil-cpp/absl/base/internal/throw_delegate.h +0 -75
  111. package/deps/abseil-cpp/absl/base/internal/tracing.cc +0 -39
  112. package/deps/abseil-cpp/absl/base/internal/tracing.h +0 -81
  113. package/deps/abseil-cpp/absl/base/internal/tracing_strong_test.cc +0 -117
  114. package/deps/abseil-cpp/absl/base/internal/tracing_weak_test.cc +0 -34
  115. package/deps/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +0 -68
  116. package/deps/abseil-cpp/absl/base/internal/unaligned_access.h +0 -89
  117. package/deps/abseil-cpp/absl/base/internal/unique_small_name_test.cc +0 -77
  118. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +0 -134
  119. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.h +0 -113
  120. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +0 -62
  121. package/deps/abseil-cpp/absl/base/log_severity.cc +0 -56
  122. package/deps/abseil-cpp/absl/base/log_severity.h +0 -185
  123. package/deps/abseil-cpp/absl/base/log_severity_test.cc +0 -251
  124. package/deps/abseil-cpp/absl/base/macros.h +0 -243
  125. package/deps/abseil-cpp/absl/base/no_destructor.h +0 -191
  126. package/deps/abseil-cpp/absl/base/no_destructor_benchmark.cc +0 -165
  127. package/deps/abseil-cpp/absl/base/no_destructor_test.cc +0 -205
  128. package/deps/abseil-cpp/absl/base/nullability.h +0 -317
  129. package/deps/abseil-cpp/absl/base/nullability_default_nonnull_test.cc +0 -44
  130. package/deps/abseil-cpp/absl/base/nullability_test.cc +0 -90
  131. package/deps/abseil-cpp/absl/base/optimization.h +0 -310
  132. package/deps/abseil-cpp/absl/base/optimization_test.cc +0 -141
  133. package/deps/abseil-cpp/absl/base/options.h +0 -158
  134. package/deps/abseil-cpp/absl/base/policy_checks.h +0 -115
  135. package/deps/abseil-cpp/absl/base/port.h +0 -25
  136. package/deps/abseil-cpp/absl/base/prefetch.h +0 -209
  137. package/deps/abseil-cpp/absl/base/prefetch_test.cc +0 -64
  138. package/deps/abseil-cpp/absl/base/raw_logging_test.cc +0 -98
  139. package/deps/abseil-cpp/absl/base/spinlock_test_common.cc +0 -302
  140. package/deps/abseil-cpp/absl/base/thread_annotations.h +0 -333
  141. package/deps/abseil-cpp/absl/base/throw_delegate_test.cc +0 -175
  142. package/deps/abseil-cpp/absl/cleanup/BUILD.bazel +0 -74
  143. package/deps/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -55
  144. package/deps/abseil-cpp/absl/cleanup/cleanup.h +0 -142
  145. package/deps/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -309
  146. package/deps/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -99
  147. package/deps/abseil-cpp/absl/container/BUILD.bazel +0 -1394
  148. package/deps/abseil-cpp/absl/container/CMakeLists.txt +0 -1239
  149. package/deps/abseil-cpp/absl/container/btree_benchmark.cc +0 -806
  150. package/deps/abseil-cpp/absl/container/btree_map.h +0 -941
  151. package/deps/abseil-cpp/absl/container/btree_set.h +0 -872
  152. package/deps/abseil-cpp/absl/container/btree_test.cc +0 -3653
  153. package/deps/abseil-cpp/absl/container/btree_test.h +0 -166
  154. package/deps/abseil-cpp/absl/container/chunked_queue.h +0 -755
  155. package/deps/abseil-cpp/absl/container/chunked_queue_benchmark.cc +0 -386
  156. package/deps/abseil-cpp/absl/container/chunked_queue_test.cc +0 -768
  157. package/deps/abseil-cpp/absl/container/fixed_array.h +0 -547
  158. package/deps/abseil-cpp/absl/container/fixed_array_benchmark.cc +0 -67
  159. package/deps/abseil-cpp/absl/container/fixed_array_exception_safety_test.cc +0 -201
  160. package/deps/abseil-cpp/absl/container/fixed_array_test.cc +0 -874
  161. package/deps/abseil-cpp/absl/container/flat_hash_map.h +0 -702
  162. package/deps/abseil-cpp/absl/container/flat_hash_map_test.cc +0 -451
  163. package/deps/abseil-cpp/absl/container/flat_hash_set.h +0 -590
  164. package/deps/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -401
  165. package/deps/abseil-cpp/absl/container/hash_container_defaults.h +0 -45
  166. package/deps/abseil-cpp/absl/container/inlined_vector.h +0 -1025
  167. package/deps/abseil-cpp/absl/container/inlined_vector_benchmark.cc +0 -829
  168. package/deps/abseil-cpp/absl/container/inlined_vector_exception_safety_test.cc +0 -508
  169. package/deps/abseil-cpp/absl/container/inlined_vector_test.cc +0 -2278
  170. package/deps/abseil-cpp/absl/container/internal/btree.h +0 -3149
  171. package/deps/abseil-cpp/absl/container/internal/btree_container.h +0 -876
  172. package/deps/abseil-cpp/absl/container/internal/chunked_queue.h +0 -173
  173. package/deps/abseil-cpp/absl/container/internal/common.h +0 -301
  174. package/deps/abseil-cpp/absl/container/internal/common_policy_traits.h +0 -151
  175. package/deps/abseil-cpp/absl/container/internal/common_policy_traits_test.cc +0 -157
  176. package/deps/abseil-cpp/absl/container/internal/compressed_tuple.h +0 -275
  177. package/deps/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +0 -469
  178. package/deps/abseil-cpp/absl/container/internal/container_memory.h +0 -561
  179. package/deps/abseil-cpp/absl/container/internal/container_memory_test.cc +0 -359
  180. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults.h +0 -281
  181. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +0 -633
  182. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -54
  183. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.h +0 -172
  184. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -173
  185. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing_test.cc +0 -45
  186. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -195
  187. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +0 -149
  188. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +0 -527
  189. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +0 -259
  190. package/deps/abseil-cpp/absl/container/internal/hashtable_debug.h +0 -102
  191. package/deps/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +0 -85
  192. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +0 -316
  193. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -311
  194. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +0 -31
  195. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +0 -534
  196. package/deps/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +0 -80
  197. package/deps/abseil-cpp/absl/container/internal/inlined_vector.h +0 -1094
  198. package/deps/abseil-cpp/absl/container/internal/layout.h +0 -828
  199. package/deps/abseil-cpp/absl/container/internal/layout_benchmark.cc +0 -295
  200. package/deps/abseil-cpp/absl/container/internal/layout_test.cc +0 -2034
  201. package/deps/abseil-cpp/absl/container/internal/node_slot_policy.h +0 -95
  202. package/deps/abseil-cpp/absl/container/internal/node_slot_policy_test.cc +0 -71
  203. package/deps/abseil-cpp/absl/container/internal/raw_hash_map.h +0 -382
  204. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.cc +0 -2090
  205. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.h +0 -3763
  206. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +0 -525
  207. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +0 -696
  208. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +0 -583
  209. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -79
  210. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +0 -66
  211. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +0 -4184
  212. package/deps/abseil-cpp/absl/container/internal/test_allocator.h +0 -387
  213. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.cc +0 -29
  214. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.h +0 -274
  215. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker_test.cc +0 -184
  216. package/deps/abseil-cpp/absl/container/internal/tracked.h +0 -83
  217. package/deps/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +0 -435
  218. package/deps/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +0 -112
  219. package/deps/abseil-cpp/absl/container/internal/unordered_map_members_test.h +0 -87
  220. package/deps/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +0 -336
  221. package/deps/abseil-cpp/absl/container/internal/unordered_map_test.cc +0 -50
  222. package/deps/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +0 -437
  223. package/deps/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +0 -88
  224. package/deps/abseil-cpp/absl/container/internal/unordered_set_members_test.h +0 -86
  225. package/deps/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +0 -215
  226. package/deps/abseil-cpp/absl/container/internal/unordered_set_test.cc +0 -41
  227. package/deps/abseil-cpp/absl/container/linked_hash_map.h +0 -666
  228. package/deps/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +0 -140
  229. package/deps/abseil-cpp/absl/container/linked_hash_map_test.cc +0 -987
  230. package/deps/abseil-cpp/absl/container/linked_hash_set.h +0 -527
  231. package/deps/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +0 -84
  232. package/deps/abseil-cpp/absl/container/linked_hash_set_test.cc +0 -947
  233. package/deps/abseil-cpp/absl/container/node_hash_map.h +0 -698
  234. package/deps/abseil-cpp/absl/container/node_hash_map_test.cc +0 -348
  235. package/deps/abseil-cpp/absl/container/node_hash_set.h +0 -589
  236. package/deps/abseil-cpp/absl/container/node_hash_set_test.cc +0 -188
  237. package/deps/abseil-cpp/absl/container/sample_element_size_test.cc +0 -118
  238. package/deps/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +0 -106
  239. package/deps/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +0 -303
  240. package/deps/abseil-cpp/absl/copts/GENERATED_copts.bzl +0 -304
  241. package/deps/abseil-cpp/absl/copts/configure_copts.bzl +0 -39
  242. package/deps/abseil-cpp/absl/copts/copts.py +0 -205
  243. package/deps/abseil-cpp/absl/copts/generate_copts.py +0 -109
  244. package/deps/abseil-cpp/absl/crc/BUILD.bazel +0 -228
  245. package/deps/abseil-cpp/absl/crc/CMakeLists.txt +0 -177
  246. package/deps/abseil-cpp/absl/crc/crc32c.cc +0 -95
  247. package/deps/abseil-cpp/absl/crc/crc32c.h +0 -192
  248. package/deps/abseil-cpp/absl/crc/crc32c_benchmark.cc +0 -196
  249. package/deps/abseil-cpp/absl/crc/crc32c_test.cc +0 -257
  250. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.cc +0 -359
  251. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.h +0 -69
  252. package/deps/abseil-cpp/absl/crc/internal/crc.cc +0 -435
  253. package/deps/abseil-cpp/absl/crc/internal/crc.h +0 -83
  254. package/deps/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -278
  255. package/deps/abseil-cpp/absl/crc/internal/crc32c.h +0 -39
  256. package/deps/abseil-cpp/absl/crc/internal/crc32c_inline.h +0 -72
  257. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.cc +0 -131
  258. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.h +0 -159
  259. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state_test.cc +0 -124
  260. package/deps/abseil-cpp/absl/crc/internal/crc_internal.h +0 -161
  261. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy.h +0 -122
  262. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +0 -78
  263. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_test.cc +0 -177
  264. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +0 -459
  265. package/deps/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +0 -93
  266. package/deps/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +0 -762
  267. package/deps/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +0 -90
  268. package/deps/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +0 -81
  269. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +0 -195
  270. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy_test.cc +0 -90
  271. package/deps/abseil-cpp/absl/debugging/BUILD.bazel +0 -483
  272. package/deps/abseil-cpp/absl/debugging/CMakeLists.txt +0 -448
  273. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.cc +0 -434
  274. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.h +0 -121
  275. package/deps/abseil-cpp/absl/debugging/failure_signal_handler_test.cc +0 -166
  276. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.cc +0 -98
  277. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.h +0 -32
  278. package/deps/abseil-cpp/absl/debugging/internal/addresses.h +0 -57
  279. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  280. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  281. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
  282. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence.h +0 -126
  283. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence_test.cc +0 -126
  284. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +0 -258
  285. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +0 -55
  286. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode_test.cc +0 -606
  287. package/deps/abseil-cpp/absl/debugging/internal/demangle.cc +0 -2958
  288. package/deps/abseil-cpp/absl/debugging/internal/demangle.h +0 -76
  289. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.cc +0 -925
  290. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.h +0 -42
  291. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust_test.cc +0 -584
  292. package/deps/abseil-cpp/absl/debugging/internal/demangle_test.cc +0 -2050
  293. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +0 -413
  294. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.h +0 -141
  295. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.cc +0 -334
  296. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.h +0 -70
  297. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.cc +0 -206
  298. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.h +0 -50
  299. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption_test.cc +0 -50
  300. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +0 -288
  301. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +0 -148
  302. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_config.h +0 -96
  303. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -112
  304. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +0 -114
  305. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +0 -270
  306. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +0 -204
  307. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +0 -25
  308. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +0 -81
  309. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +0 -410
  310. package/deps/abseil-cpp/absl/debugging/internal/symbolize.h +0 -153
  311. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc +0 -70
  312. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.h +0 -47
  313. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point_test.cc +0 -175
  314. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -209
  315. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.h +0 -158
  316. package/deps/abseil-cpp/absl/debugging/leak_check.cc +0 -73
  317. package/deps/abseil-cpp/absl/debugging/leak_check.h +0 -150
  318. package/deps/abseil-cpp/absl/debugging/leak_check_fail_test.cc +0 -41
  319. package/deps/abseil-cpp/absl/debugging/leak_check_test.cc +0 -41
  320. package/deps/abseil-cpp/absl/debugging/stacktrace.cc +0 -244
  321. package/deps/abseil-cpp/absl/debugging/stacktrace.h +0 -302
  322. package/deps/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +0 -78
  323. package/deps/abseil-cpp/absl/debugging/stacktrace_test.cc +0 -505
  324. package/deps/abseil-cpp/absl/debugging/symbolize.cc +0 -44
  325. package/deps/abseil-cpp/absl/debugging/symbolize.h +0 -99
  326. package/deps/abseil-cpp/absl/debugging/symbolize_darwin.inc +0 -102
  327. package/deps/abseil-cpp/absl/debugging/symbolize_elf.inc +0 -1756
  328. package/deps/abseil-cpp/absl/debugging/symbolize_emscripten.inc +0 -63
  329. package/deps/abseil-cpp/absl/debugging/symbolize_test.cc +0 -619
  330. package/deps/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +0 -40
  331. package/deps/abseil-cpp/absl/debugging/symbolize_win32.inc +0 -99
  332. package/deps/abseil-cpp/absl/extend/CMakeLists.txt +0 -140
  333. package/deps/abseil-cpp/absl/extend/internal/BUILD.bazel +0 -127
  334. package/deps/abseil-cpp/absl/extend/internal/aggregate.h +0 -1687
  335. package/deps/abseil-cpp/absl/extend/internal/aggregate_test.cc +0 -867
  336. package/deps/abseil-cpp/absl/extend/internal/dependencies.h +0 -83
  337. package/deps/abseil-cpp/absl/extend/internal/dependencies_test.cc +0 -117
  338. package/deps/abseil-cpp/absl/extend/internal/is_tuple_hashable.h +0 -45
  339. package/deps/abseil-cpp/absl/extend/internal/num_bases.h +0 -87
  340. package/deps/abseil-cpp/absl/extend/internal/num_bases_test.cc +0 -91
  341. package/deps/abseil-cpp/absl/extend/internal/num_initializers.h +0 -113
  342. package/deps/abseil-cpp/absl/extend/internal/num_initializers_test.cc +0 -250
  343. package/deps/abseil-cpp/absl/extend/internal/reflection.cc +0 -112
  344. package/deps/abseil-cpp/absl/extend/internal/reflection.h +0 -75
  345. package/deps/abseil-cpp/absl/extend/internal/tuple.h +0 -51
  346. package/deps/abseil-cpp/absl/flags/BUILD.bazel +0 -618
  347. package/deps/abseil-cpp/absl/flags/CMakeLists.txt +0 -482
  348. package/deps/abseil-cpp/absl/flags/commandlineflag.cc +0 -35
  349. package/deps/abseil-cpp/absl/flags/commandlineflag.h +0 -219
  350. package/deps/abseil-cpp/absl/flags/commandlineflag_test.cc +0 -236
  351. package/deps/abseil-cpp/absl/flags/config.h +0 -68
  352. package/deps/abseil-cpp/absl/flags/config_test.cc +0 -61
  353. package/deps/abseil-cpp/absl/flags/declare.h +0 -77
  354. package/deps/abseil-cpp/absl/flags/flag.h +0 -307
  355. package/deps/abseil-cpp/absl/flags/flag_benchmark.cc +0 -251
  356. package/deps/abseil-cpp/absl/flags/flag_benchmark.lds +0 -13
  357. package/deps/abseil-cpp/absl/flags/flag_test.cc +0 -1381
  358. package/deps/abseil-cpp/absl/flags/flag_test_defs.cc +0 -24
  359. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.cc +0 -26
  360. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.h +0 -68
  361. package/deps/abseil-cpp/absl/flags/internal/flag.cc +0 -712
  362. package/deps/abseil-cpp/absl/flags/internal/flag.h +0 -969
  363. package/deps/abseil-cpp/absl/flags/internal/parse.h +0 -70
  364. package/deps/abseil-cpp/absl/flags/internal/path_util.h +0 -62
  365. package/deps/abseil-cpp/absl/flags/internal/path_util_test.cc +0 -46
  366. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +0 -69
  367. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.h +0 -64
  368. package/deps/abseil-cpp/absl/flags/internal/program_name.cc +0 -61
  369. package/deps/abseil-cpp/absl/flags/internal/program_name.h +0 -50
  370. package/deps/abseil-cpp/absl/flags/internal/program_name_test.cc +0 -61
  371. package/deps/abseil-cpp/absl/flags/internal/registry.h +0 -98
  372. package/deps/abseil-cpp/absl/flags/internal/sequence_lock.h +0 -187
  373. package/deps/abseil-cpp/absl/flags/internal/sequence_lock_test.cc +0 -169
  374. package/deps/abseil-cpp/absl/flags/internal/usage.cc +0 -558
  375. package/deps/abseil-cpp/absl/flags/internal/usage.h +0 -106
  376. package/deps/abseil-cpp/absl/flags/internal/usage_test.cc +0 -550
  377. package/deps/abseil-cpp/absl/flags/marshalling.cc +0 -276
  378. package/deps/abseil-cpp/absl/flags/marshalling.h +0 -361
  379. package/deps/abseil-cpp/absl/flags/marshalling_test.cc +0 -1220
  380. package/deps/abseil-cpp/absl/flags/parse.cc +0 -952
  381. package/deps/abseil-cpp/absl/flags/parse.h +0 -130
  382. package/deps/abseil-cpp/absl/flags/parse_test.cc +0 -1094
  383. package/deps/abseil-cpp/absl/flags/reflection.cc +0 -368
  384. package/deps/abseil-cpp/absl/flags/reflection.h +0 -90
  385. package/deps/abseil-cpp/absl/flags/reflection_test.cc +0 -268
  386. package/deps/abseil-cpp/absl/flags/usage.cc +0 -66
  387. package/deps/abseil-cpp/absl/flags/usage.h +0 -43
  388. package/deps/abseil-cpp/absl/flags/usage_config.cc +0 -170
  389. package/deps/abseil-cpp/absl/flags/usage_config.h +0 -135
  390. package/deps/abseil-cpp/absl/flags/usage_config_test.cc +0 -205
  391. package/deps/abseil-cpp/absl/functional/BUILD.bazel +0 -173
  392. package/deps/abseil-cpp/absl/functional/CMakeLists.txt +0 -140
  393. package/deps/abseil-cpp/absl/functional/any_invocable.h +0 -336
  394. package/deps/abseil-cpp/absl/functional/any_invocable_test.cc +0 -1687
  395. package/deps/abseil-cpp/absl/functional/bind_front.h +0 -200
  396. package/deps/abseil-cpp/absl/functional/bind_front_test.cc +0 -227
  397. package/deps/abseil-cpp/absl/functional/function_ref.h +0 -249
  398. package/deps/abseil-cpp/absl/functional/function_ref_test.cc +0 -416
  399. package/deps/abseil-cpp/absl/functional/function_type_benchmark.cc +0 -176
  400. package/deps/abseil-cpp/absl/functional/internal/any_invocable.h +0 -787
  401. package/deps/abseil-cpp/absl/functional/internal/front_binder.h +0 -93
  402. package/deps/abseil-cpp/absl/functional/internal/function_ref.h +0 -151
  403. package/deps/abseil-cpp/absl/functional/overload.h +0 -72
  404. package/deps/abseil-cpp/absl/functional/overload_test.cc +0 -207
  405. package/deps/abseil-cpp/absl/hash/BUILD.bazel +0 -220
  406. package/deps/abseil-cpp/absl/hash/CMakeLists.txt +0 -179
  407. package/deps/abseil-cpp/absl/hash/hash.h +0 -466
  408. package/deps/abseil-cpp/absl/hash/hash_benchmark.cc +0 -398
  409. package/deps/abseil-cpp/absl/hash/hash_instantiated_test.cc +0 -224
  410. package/deps/abseil-cpp/absl/hash/hash_test.cc +0 -1320
  411. package/deps/abseil-cpp/absl/hash/hash_testing.h +0 -380
  412. package/deps/abseil-cpp/absl/hash/internal/city.cc +0 -337
  413. package/deps/abseil-cpp/absl/hash/internal/city.h +0 -78
  414. package/deps/abseil-cpp/absl/hash/internal/city_test.cc +0 -597
  415. package/deps/abseil-cpp/absl/hash/internal/hash.cc +0 -430
  416. package/deps/abseil-cpp/absl/hash/internal/hash.h +0 -1563
  417. package/deps/abseil-cpp/absl/hash/internal/hash_test.h +0 -87
  418. package/deps/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +0 -509
  419. package/deps/abseil-cpp/absl/hash/internal/print_hash_of.cc +0 -23
  420. package/deps/abseil-cpp/absl/hash/internal/spy_hash_state.h +0 -286
  421. package/deps/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +0 -38
  422. package/deps/abseil-cpp/absl/log/BUILD.bazel +0 -686
  423. package/deps/abseil-cpp/absl/log/CMakeLists.txt +0 -1239
  424. package/deps/abseil-cpp/absl/log/absl_check.h +0 -117
  425. package/deps/abseil-cpp/absl/log/absl_check_test.cc +0 -58
  426. package/deps/abseil-cpp/absl/log/absl_log.h +0 -115
  427. package/deps/abseil-cpp/absl/log/absl_log_basic_test.cc +0 -22
  428. package/deps/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -95
  429. package/deps/abseil-cpp/absl/log/check.h +0 -210
  430. package/deps/abseil-cpp/absl/log/check_test.cc +0 -58
  431. package/deps/abseil-cpp/absl/log/check_test_impl.inc +0 -1035
  432. package/deps/abseil-cpp/absl/log/die_if_null.cc +0 -34
  433. package/deps/abseil-cpp/absl/log/die_if_null.h +0 -97
  434. package/deps/abseil-cpp/absl/log/die_if_null_test.cc +0 -107
  435. package/deps/abseil-cpp/absl/log/flags.cc +0 -143
  436. package/deps/abseil-cpp/absl/log/flags.h +0 -43
  437. package/deps/abseil-cpp/absl/log/flags_test.cc +0 -195
  438. package/deps/abseil-cpp/absl/log/globals.cc +0 -178
  439. package/deps/abseil-cpp/absl/log/globals.h +0 -230
  440. package/deps/abseil-cpp/absl/log/globals_test.cc +0 -156
  441. package/deps/abseil-cpp/absl/log/initialize.cc +0 -38
  442. package/deps/abseil-cpp/absl/log/initialize.h +0 -45
  443. package/deps/abseil-cpp/absl/log/internal/BUILD.bazel +0 -581
  444. package/deps/abseil-cpp/absl/log/internal/append_truncated.h +0 -75
  445. package/deps/abseil-cpp/absl/log/internal/check_impl.h +0 -151
  446. package/deps/abseil-cpp/absl/log/internal/check_op.cc +0 -147
  447. package/deps/abseil-cpp/absl/log/internal/check_op.h +0 -565
  448. package/deps/abseil-cpp/absl/log/internal/conditions.cc +0 -85
  449. package/deps/abseil-cpp/absl/log/internal/conditions.h +0 -247
  450. package/deps/abseil-cpp/absl/log/internal/config.h +0 -45
  451. package/deps/abseil-cpp/absl/log/internal/container.h +0 -312
  452. package/deps/abseil-cpp/absl/log/internal/container_test.cc +0 -254
  453. package/deps/abseil-cpp/absl/log/internal/flags.h +0 -59
  454. package/deps/abseil-cpp/absl/log/internal/fnmatch.cc +0 -73
  455. package/deps/abseil-cpp/absl/log/internal/fnmatch.h +0 -35
  456. package/deps/abseil-cpp/absl/log/internal/fnmatch_benchmark.cc +0 -29
  457. package/deps/abseil-cpp/absl/log/internal/fnmatch_test.cc +0 -60
  458. package/deps/abseil-cpp/absl/log/internal/globals.cc +0 -145
  459. package/deps/abseil-cpp/absl/log/internal/globals.h +0 -101
  460. package/deps/abseil-cpp/absl/log/internal/log_format.cc +0 -205
  461. package/deps/abseil-cpp/absl/log/internal/log_format.h +0 -78
  462. package/deps/abseil-cpp/absl/log/internal/log_impl.h +0 -280
  463. package/deps/abseil-cpp/absl/log/internal/log_message.cc +0 -787
  464. package/deps/abseil-cpp/absl/log/internal/log_message.h +0 -455
  465. package/deps/abseil-cpp/absl/log/internal/log_sink_set.cc +0 -296
  466. package/deps/abseil-cpp/absl/log/internal/log_sink_set.h +0 -54
  467. package/deps/abseil-cpp/absl/log/internal/nullguard.cc +0 -35
  468. package/deps/abseil-cpp/absl/log/internal/nullguard.h +0 -88
  469. package/deps/abseil-cpp/absl/log/internal/nullstream.h +0 -128
  470. package/deps/abseil-cpp/absl/log/internal/proto.cc +0 -218
  471. package/deps/abseil-cpp/absl/log/internal/proto.h +0 -298
  472. package/deps/abseil-cpp/absl/log/internal/stderr_log_sink_test.cc +0 -105
  473. package/deps/abseil-cpp/absl/log/internal/strip.h +0 -99
  474. package/deps/abseil-cpp/absl/log/internal/structured.h +0 -160
  475. package/deps/abseil-cpp/absl/log/internal/structured_proto.cc +0 -115
  476. package/deps/abseil-cpp/absl/log/internal/structured_proto.h +0 -107
  477. package/deps/abseil-cpp/absl/log/internal/structured_proto_test.cc +0 -120
  478. package/deps/abseil-cpp/absl/log/internal/test_actions.cc +0 -75
  479. package/deps/abseil-cpp/absl/log/internal/test_actions.h +0 -90
  480. package/deps/abseil-cpp/absl/log/internal/test_helpers.cc +0 -82
  481. package/deps/abseil-cpp/absl/log/internal/test_helpers.h +0 -71
  482. package/deps/abseil-cpp/absl/log/internal/test_matchers.cc +0 -216
  483. package/deps/abseil-cpp/absl/log/internal/test_matchers.h +0 -94
  484. package/deps/abseil-cpp/absl/log/internal/vlog_config.cc +0 -347
  485. package/deps/abseil-cpp/absl/log/internal/vlog_config.h +0 -164
  486. package/deps/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +0 -187
  487. package/deps/abseil-cpp/absl/log/internal/voidify.h +0 -50
  488. package/deps/abseil-cpp/absl/log/log.h +0 -378
  489. package/deps/abseil-cpp/absl/log/log_basic_test.cc +0 -22
  490. package/deps/abseil-cpp/absl/log/log_basic_test_impl.inc +0 -654
  491. package/deps/abseil-cpp/absl/log/log_benchmark.cc +0 -164
  492. package/deps/abseil-cpp/absl/log/log_entry.cc +0 -263
  493. package/deps/abseil-cpp/absl/log/log_entry.h +0 -223
  494. package/deps/abseil-cpp/absl/log/log_entry_test.cc +0 -468
  495. package/deps/abseil-cpp/absl/log/log_format_test.cc +0 -2261
  496. package/deps/abseil-cpp/absl/log/log_macro_hygiene_test.cc +0 -187
  497. package/deps/abseil-cpp/absl/log/log_modifier_methods_test.cc +0 -244
  498. package/deps/abseil-cpp/absl/log/log_sink.cc +0 -23
  499. package/deps/abseil-cpp/absl/log/log_sink.h +0 -71
  500. package/deps/abseil-cpp/absl/log/log_sink_registry.h +0 -64
  501. package/deps/abseil-cpp/absl/log/log_sink_test.cc +0 -418
  502. package/deps/abseil-cpp/absl/log/log_streamer.h +0 -181
  503. package/deps/abseil-cpp/absl/log/log_streamer_test.cc +0 -451
  504. package/deps/abseil-cpp/absl/log/scoped_mock_log.cc +0 -86
  505. package/deps/abseil-cpp/absl/log/scoped_mock_log.h +0 -203
  506. package/deps/abseil-cpp/absl/log/scoped_mock_log_test.cc +0 -295
  507. package/deps/abseil-cpp/absl/log/stripping_test.cc +0 -502
  508. package/deps/abseil-cpp/absl/log/structured.h +0 -75
  509. package/deps/abseil-cpp/absl/log/structured_test.cc +0 -64
  510. package/deps/abseil-cpp/absl/log/vlog_is_on.h +0 -74
  511. package/deps/abseil-cpp/absl/log/vlog_is_on_test.cc +0 -233
  512. package/deps/abseil-cpp/absl/memory/BUILD.bazel +0 -62
  513. package/deps/abseil-cpp/absl/memory/CMakeLists.txt +0 -41
  514. package/deps/abseil-cpp/absl/memory/memory.h +0 -278
  515. package/deps/abseil-cpp/absl/memory/memory_test.cc +0 -222
  516. package/deps/abseil-cpp/absl/meta/BUILD.bazel +0 -112
  517. package/deps/abseil-cpp/absl/meta/CMakeLists.txt +0 -100
  518. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing.h +0 -73
  519. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +0 -40
  520. package/deps/abseil-cpp/absl/meta/internal/requires.h +0 -67
  521. package/deps/abseil-cpp/absl/meta/internal/requires_test.cc +0 -66
  522. package/deps/abseil-cpp/absl/meta/type_traits.h +0 -582
  523. package/deps/abseil-cpp/absl/meta/type_traits_test.cc +0 -378
  524. package/deps/abseil-cpp/absl/numeric/BUILD.bazel +0 -145
  525. package/deps/abseil-cpp/absl/numeric/CMakeLists.txt +0 -104
  526. package/deps/abseil-cpp/absl/numeric/bits.h +0 -262
  527. package/deps/abseil-cpp/absl/numeric/bits_benchmark.cc +0 -73
  528. package/deps/abseil-cpp/absl/numeric/bits_test.cc +0 -724
  529. package/deps/abseil-cpp/absl/numeric/int128.cc +0 -344
  530. package/deps/abseil-cpp/absl/numeric/int128.h +0 -1224
  531. package/deps/abseil-cpp/absl/numeric/int128_benchmark.cc +0 -281
  532. package/deps/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +0 -303
  533. package/deps/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +0 -347
  534. package/deps/abseil-cpp/absl/numeric/int128_stream_test.cc +0 -1400
  535. package/deps/abseil-cpp/absl/numeric/int128_test.cc +0 -1407
  536. package/deps/abseil-cpp/absl/numeric/internal/bits.h +0 -394
  537. package/deps/abseil-cpp/absl/numeric/internal/representation.h +0 -55
  538. package/deps/abseil-cpp/absl/profiling/BUILD.bazel +0 -188
  539. package/deps/abseil-cpp/absl/profiling/CMakeLists.txt +0 -132
  540. package/deps/abseil-cpp/absl/profiling/hashtable.cc +0 -135
  541. package/deps/abseil-cpp/absl/profiling/hashtable.h +0 -40
  542. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.cc +0 -93
  543. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.h +0 -130
  544. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased_test.cc +0 -203
  545. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.cc +0 -53
  546. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.h +0 -211
  547. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_benchmark.cc +0 -79
  548. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_test.cc +0 -177
  549. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.cc +0 -463
  550. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.h +0 -161
  551. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder.h +0 -253
  552. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +0 -188
  553. package/deps/abseil-cpp/absl/random/BUILD.bazel +0 -550
  554. package/deps/abseil-cpp/absl/random/CMakeLists.txt +0 -1250
  555. package/deps/abseil-cpp/absl/random/benchmarks.cc +0 -376
  556. package/deps/abseil-cpp/absl/random/bernoulli_distribution.h +0 -202
  557. package/deps/abseil-cpp/absl/random/bernoulli_distribution_test.cc +0 -217
  558. package/deps/abseil-cpp/absl/random/beta_distribution.h +0 -429
  559. package/deps/abseil-cpp/absl/random/beta_distribution_test.cc +0 -615
  560. package/deps/abseil-cpp/absl/random/bit_gen_ref.h +0 -187
  561. package/deps/abseil-cpp/absl/random/bit_gen_ref_test.cc +0 -107
  562. package/deps/abseil-cpp/absl/random/discrete_distribution.cc +0 -108
  563. package/deps/abseil-cpp/absl/random/discrete_distribution.h +0 -249
  564. package/deps/abseil-cpp/absl/random/discrete_distribution_test.cc +0 -251
  565. package/deps/abseil-cpp/absl/random/distributions.h +0 -450
  566. package/deps/abseil-cpp/absl/random/distributions_test.cc +0 -516
  567. package/deps/abseil-cpp/absl/random/examples_test.cc +0 -98
  568. package/deps/abseil-cpp/absl/random/exponential_distribution.h +0 -166
  569. package/deps/abseil-cpp/absl/random/exponential_distribution_test.cc +0 -426
  570. package/deps/abseil-cpp/absl/random/gaussian_distribution.cc +0 -104
  571. package/deps/abseil-cpp/absl/random/gaussian_distribution.h +0 -276
  572. package/deps/abseil-cpp/absl/random/gaussian_distribution_test.cc +0 -561
  573. package/deps/abseil-cpp/absl/random/generators_test.cc +0 -185
  574. package/deps/abseil-cpp/absl/random/internal/BUILD.bazel +0 -863
  575. package/deps/abseil-cpp/absl/random/internal/chi_square.cc +0 -230
  576. package/deps/abseil-cpp/absl/random/internal/chi_square.h +0 -89
  577. package/deps/abseil-cpp/absl/random/internal/chi_square_test.cc +0 -364
  578. package/deps/abseil-cpp/absl/random/internal/distribution_caller.h +0 -96
  579. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.cc +0 -418
  580. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.h +0 -113
  581. package/deps/abseil-cpp/absl/random/internal/distribution_test_util_test.cc +0 -193
  582. package/deps/abseil-cpp/absl/random/internal/entropy_pool.cc +0 -185
  583. package/deps/abseil-cpp/absl/random/internal/entropy_pool.h +0 -35
  584. package/deps/abseil-cpp/absl/random/internal/entropy_pool_test.cc +0 -119
  585. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq.h +0 -92
  586. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq_test.cc +0 -241
  587. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits.h +0 -271
  588. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits_test.cc +0 -336
  589. package/deps/abseil-cpp/absl/random/internal/fastmath.h +0 -57
  590. package/deps/abseil-cpp/absl/random/internal/fastmath_test.cc +0 -95
  591. package/deps/abseil-cpp/absl/random/internal/gaussian_distribution_gentables.cc +0 -142
  592. package/deps/abseil-cpp/absl/random/internal/generate_real.h +0 -144
  593. package/deps/abseil-cpp/absl/random/internal/generate_real_test.cc +0 -496
  594. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver.h +0 -248
  595. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +0 -373
  596. package/deps/abseil-cpp/absl/random/internal/mock_helpers.h +0 -160
  597. package/deps/abseil-cpp/absl/random/internal/mock_overload_set.h +0 -122
  598. package/deps/abseil-cpp/absl/random/internal/mock_validators.h +0 -98
  599. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.cc +0 -804
  600. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.h +0 -172
  601. package/deps/abseil-cpp/absl/random/internal/nanobenchmark_test.cc +0 -79
  602. package/deps/abseil-cpp/absl/random/internal/nonsecure_base.h +0 -160
  603. package/deps/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +0 -267
  604. package/deps/abseil-cpp/absl/random/internal/pcg_engine.h +0 -287
  605. package/deps/abseil-cpp/absl/random/internal/pcg_engine_test.cc +0 -638
  606. package/deps/abseil-cpp/absl/random/internal/platform.h +0 -158
  607. package/deps/abseil-cpp/absl/random/internal/randen.cc +0 -91
  608. package/deps/abseil-cpp/absl/random/internal/randen.h +0 -96
  609. package/deps/abseil-cpp/absl/random/internal/randen_benchmarks.cc +0 -177
  610. package/deps/abseil-cpp/absl/random/internal/randen_detect.cc +0 -280
  611. package/deps/abseil-cpp/absl/random/internal/randen_detect.h +0 -33
  612. package/deps/abseil-cpp/absl/random/internal/randen_engine.h +0 -265
  613. package/deps/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -654
  614. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.cc +0 -526
  615. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.h +0 -50
  616. package/deps/abseil-cpp/absl/random/internal/randen_hwaes_test.cc +0 -99
  617. package/deps/abseil-cpp/absl/random/internal/randen_round_keys.cc +0 -462
  618. package/deps/abseil-cpp/absl/random/internal/randen_slow.cc +0 -471
  619. package/deps/abseil-cpp/absl/random/internal/randen_slow.h +0 -40
  620. package/deps/abseil-cpp/absl/random/internal/randen_slow_test.cc +0 -61
  621. package/deps/abseil-cpp/absl/random/internal/randen_test.cc +0 -75
  622. package/deps/abseil-cpp/absl/random/internal/randen_traits.h +0 -88
  623. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq.h +0 -165
  624. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq_test.cc +0 -172
  625. package/deps/abseil-cpp/absl/random/internal/seed_material.cc +0 -249
  626. package/deps/abseil-cpp/absl/random/internal/seed_material.h +0 -104
  627. package/deps/abseil-cpp/absl/random/internal/seed_material_test.cc +0 -205
  628. package/deps/abseil-cpp/absl/random/internal/sequence_urbg.h +0 -60
  629. package/deps/abseil-cpp/absl/random/internal/traits.h +0 -149
  630. package/deps/abseil-cpp/absl/random/internal/traits_test.cc +0 -123
  631. package/deps/abseil-cpp/absl/random/internal/uniform_helper.h +0 -244
  632. package/deps/abseil-cpp/absl/random/internal/uniform_helper_test.cc +0 -279
  633. package/deps/abseil-cpp/absl/random/internal/wide_multiply.h +0 -95
  634. package/deps/abseil-cpp/absl/random/internal/wide_multiply_test.cc +0 -119
  635. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution.h +0 -253
  636. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution_test.cc +0 -277
  637. package/deps/abseil-cpp/absl/random/mock_distributions.h +0 -269
  638. package/deps/abseil-cpp/absl/random/mock_distributions_test.cc +0 -281
  639. package/deps/abseil-cpp/absl/random/mocking_bit_gen.h +0 -237
  640. package/deps/abseil-cpp/absl/random/mocking_bit_gen_test.cc +0 -403
  641. package/deps/abseil-cpp/absl/random/poisson_distribution.h +0 -262
  642. package/deps/abseil-cpp/absl/random/poisson_distribution_test.cc +0 -569
  643. package/deps/abseil-cpp/absl/random/random.h +0 -224
  644. package/deps/abseil-cpp/absl/random/seed_gen_exception.cc +0 -45
  645. package/deps/abseil-cpp/absl/random/seed_gen_exception.h +0 -55
  646. package/deps/abseil-cpp/absl/random/seed_sequences.cc +0 -33
  647. package/deps/abseil-cpp/absl/random/seed_sequences.h +0 -112
  648. package/deps/abseil-cpp/absl/random/seed_sequences_test.cc +0 -126
  649. package/deps/abseil-cpp/absl/random/uniform_int_distribution.h +0 -276
  650. package/deps/abseil-cpp/absl/random/uniform_int_distribution_test.cc +0 -259
  651. package/deps/abseil-cpp/absl/random/uniform_real_distribution.h +0 -204
  652. package/deps/abseil-cpp/absl/random/uniform_real_distribution_test.cc +0 -394
  653. package/deps/abseil-cpp/absl/random/zipf_distribution.h +0 -273
  654. package/deps/abseil-cpp/absl/random/zipf_distribution_test.cc +0 -423
  655. package/deps/abseil-cpp/absl/status/BUILD.bazel +0 -211
  656. package/deps/abseil-cpp/absl/status/CMakeLists.txt +0 -159
  657. package/deps/abseil-cpp/absl/status/internal/status_internal.cc +0 -251
  658. package/deps/abseil-cpp/absl/status/internal/status_internal.h +0 -133
  659. package/deps/abseil-cpp/absl/status/internal/status_matchers.cc +0 -69
  660. package/deps/abseil-cpp/absl/status/internal/status_matchers.h +0 -246
  661. package/deps/abseil-cpp/absl/status/internal/statusor_internal.h +0 -657
  662. package/deps/abseil-cpp/absl/status/status.cc +0 -421
  663. package/deps/abseil-cpp/absl/status/status.h +0 -948
  664. package/deps/abseil-cpp/absl/status/status_benchmark.cc +0 -37
  665. package/deps/abseil-cpp/absl/status/status_matchers.h +0 -166
  666. package/deps/abseil-cpp/absl/status/status_matchers_test.cc +0 -211
  667. package/deps/abseil-cpp/absl/status/status_payload_printer.cc +0 -36
  668. package/deps/abseil-cpp/absl/status/status_payload_printer.h +0 -52
  669. package/deps/abseil-cpp/absl/status/status_test.cc +0 -580
  670. package/deps/abseil-cpp/absl/status/statusor.cc +0 -106
  671. package/deps/abseil-cpp/absl/status/statusor.h +0 -743
  672. package/deps/abseil-cpp/absl/status/statusor_benchmark.cc +0 -480
  673. package/deps/abseil-cpp/absl/status/statusor_test.cc +0 -2124
  674. package/deps/abseil-cpp/absl/strings/BUILD.bazel +0 -1593
  675. package/deps/abseil-cpp/absl/strings/CMakeLists.txt +0 -1295
  676. package/deps/abseil-cpp/absl/strings/ascii.cc +0 -296
  677. package/deps/abseil-cpp/absl/strings/ascii.h +0 -289
  678. package/deps/abseil-cpp/absl/strings/ascii_benchmark.cc +0 -157
  679. package/deps/abseil-cpp/absl/strings/ascii_test.cc +0 -374
  680. package/deps/abseil-cpp/absl/strings/atod_manual_test.cc +0 -193
  681. package/deps/abseil-cpp/absl/strings/char_formatting_test.cc +0 -169
  682. package/deps/abseil-cpp/absl/strings/charconv.cc +0 -1442
  683. package/deps/abseil-cpp/absl/strings/charconv.h +0 -123
  684. package/deps/abseil-cpp/absl/strings/charconv_benchmark.cc +0 -203
  685. package/deps/abseil-cpp/absl/strings/charconv_test.cc +0 -787
  686. package/deps/abseil-cpp/absl/strings/charset.h +0 -163
  687. package/deps/abseil-cpp/absl/strings/charset_benchmark.cc +0 -57
  688. package/deps/abseil-cpp/absl/strings/charset_test.cc +0 -181
  689. package/deps/abseil-cpp/absl/strings/cord.cc +0 -1582
  690. package/deps/abseil-cpp/absl/strings/cord.h +0 -1763
  691. package/deps/abseil-cpp/absl/strings/cord_analysis.cc +0 -196
  692. package/deps/abseil-cpp/absl/strings/cord_analysis.h +0 -63
  693. package/deps/abseil-cpp/absl/strings/cord_buffer.h +0 -572
  694. package/deps/abseil-cpp/absl/strings/cord_buffer_test.cc +0 -322
  695. package/deps/abseil-cpp/absl/strings/cord_test.cc +0 -3421
  696. package/deps/abseil-cpp/absl/strings/cord_test_helpers.h +0 -122
  697. package/deps/abseil-cpp/absl/strings/cordz_test.cc +0 -468
  698. package/deps/abseil-cpp/absl/strings/cordz_test_helpers.h +0 -152
  699. package/deps/abseil-cpp/absl/strings/escaping.cc +0 -1035
  700. package/deps/abseil-cpp/absl/strings/escaping.h +0 -185
  701. package/deps/abseil-cpp/absl/strings/escaping_benchmark.cc +0 -124
  702. package/deps/abseil-cpp/absl/strings/escaping_test.cc +0 -760
  703. package/deps/abseil-cpp/absl/strings/has_absl_stringify.h +0 -64
  704. package/deps/abseil-cpp/absl/strings/has_absl_stringify_test.cc +0 -40
  705. package/deps/abseil-cpp/absl/strings/has_ostream_operator.h +0 -42
  706. package/deps/abseil-cpp/absl/strings/has_ostream_operator_test.cc +0 -41
  707. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite.h +0 -93
  708. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +0 -95
  709. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.cc +0 -357
  710. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.h +0 -433
  711. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +0 -260
  712. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.cc +0 -504
  713. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.h +0 -99
  714. package/deps/abseil-cpp/absl/strings/internal/charconv_parse_test.cc +0 -357
  715. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge.h +0 -63
  716. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge_test.cc +0 -130
  717. package/deps/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -70
  718. package/deps/abseil-cpp/absl/strings/internal/cord_internal.h +0 -942
  719. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -1237
  720. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.h +0 -944
  721. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +0 -187
  722. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +0 -267
  723. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator_test.cc +0 -346
  724. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +0 -69
  725. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +0 -212
  726. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader_test.cc +0 -293
  727. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +0 -1568
  728. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +0 -64
  729. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.h +0 -47
  730. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +0 -56
  731. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.h +0 -103
  732. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc +0 -130
  733. package/deps/abseil-cpp/absl/strings/internal/cord_rep_flat.h +0 -195
  734. package/deps/abseil-cpp/absl/strings/internal/cord_rep_test_util.h +0 -205
  735. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.cc +0 -102
  736. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.h +0 -87
  737. package/deps/abseil-cpp/absl/strings/internal/cordz_functions_test.cc +0 -147
  738. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.cc +0 -165
  739. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.h +0 -98
  740. package/deps/abseil-cpp/absl/strings/internal/cordz_handle_test.cc +0 -265
  741. package/deps/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -424
  742. package/deps/abseil-cpp/absl/strings/internal/cordz_info.h +0 -295
  743. package/deps/abseil-cpp/absl/strings/internal/cordz_info_statistics_test.cc +0 -510
  744. package/deps/abseil-cpp/absl/strings/internal/cordz_info_test.cc +0 -342
  745. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.cc +0 -64
  746. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.h +0 -97
  747. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +0 -208
  748. package/deps/abseil-cpp/absl/strings/internal/cordz_statistics.h +0 -88
  749. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope.h +0 -71
  750. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope_test.cc +0 -49
  751. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +0 -123
  752. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker_test.cc +0 -147
  753. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +0 -99
  754. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +0 -35
  755. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +0 -56
  756. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc +0 -99
  757. package/deps/abseil-cpp/absl/strings/internal/escaping.cc +0 -209
  758. package/deps/abseil-cpp/absl/strings/internal/escaping.h +0 -59
  759. package/deps/abseil-cpp/absl/strings/internal/escaping_test_common.h +0 -133
  760. package/deps/abseil-cpp/absl/strings/internal/generic_printer.cc +0 -107
  761. package/deps/abseil-cpp/absl/strings/internal/generic_printer.h +0 -115
  762. package/deps/abseil-cpp/absl/strings/internal/generic_printer_internal.h +0 -423
  763. package/deps/abseil-cpp/absl/strings/internal/generic_printer_test.cc +0 -685
  764. package/deps/abseil-cpp/absl/strings/internal/memutil.cc +0 -48
  765. package/deps/abseil-cpp/absl/strings/internal/memutil.h +0 -40
  766. package/deps/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +0 -127
  767. package/deps/abseil-cpp/absl/strings/internal/memutil_test.cc +0 -41
  768. package/deps/abseil-cpp/absl/strings/internal/numbers_test_common.h +0 -184
  769. package/deps/abseil-cpp/absl/strings/internal/ostringstream.cc +0 -43
  770. package/deps/abseil-cpp/absl/strings/internal/ostringstream.h +0 -114
  771. package/deps/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +0 -105
  772. package/deps/abseil-cpp/absl/strings/internal/ostringstream_test.cc +0 -131
  773. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.cc +0 -122
  774. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.h +0 -40
  775. package/deps/abseil-cpp/absl/strings/internal/pow10_helper_test.cc +0 -122
  776. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -119
  777. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +0 -108
  778. package/deps/abseil-cpp/absl/strings/internal/stl_type_traits.h +0 -248
  779. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.cc +0 -615
  780. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.h +0 -661
  781. package/deps/abseil-cpp/absl/strings/internal/str_format/arg_test.cc +0 -162
  782. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.cc +0 -275
  783. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.h +0 -237
  784. package/deps/abseil-cpp/absl/strings/internal/str_format/bind_test.cc +0 -157
  785. package/deps/abseil-cpp/absl/strings/internal/str_format/checker.h +0 -98
  786. package/deps/abseil-cpp/absl/strings/internal/str_format/checker_test.cc +0 -176
  787. package/deps/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +0 -357
  788. package/deps/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +0 -1471
  789. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -53
  790. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.h +0 -456
  791. package/deps/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +0 -110
  792. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +0 -1945
  793. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +0 -37
  794. package/deps/abseil-cpp/absl/strings/internal/str_format/output.cc +0 -74
  795. package/deps/abseil-cpp/absl/strings/internal/str_format/output.h +0 -97
  796. package/deps/abseil-cpp/absl/strings/internal/str_format/output_test.cc +0 -79
  797. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.cc +0 -140
  798. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.h +0 -271
  799. package/deps/abseil-cpp/absl/strings/internal/str_format/parser_test.cc +0 -446
  800. package/deps/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -341
  801. package/deps/abseil-cpp/absl/strings/internal/str_split_internal.h +0 -525
  802. package/deps/abseil-cpp/absl/strings/internal/string_constant.h +0 -67
  803. package/deps/abseil-cpp/absl/strings/internal/string_constant_test.cc +0 -60
  804. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.cc +0 -28
  805. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.h +0 -57
  806. package/deps/abseil-cpp/absl/strings/internal/utf8.cc +0 -148
  807. package/deps/abseil-cpp/absl/strings/internal/utf8.h +0 -64
  808. package/deps/abseil-cpp/absl/strings/internal/utf8_test.cc +0 -259
  809. package/deps/abseil-cpp/absl/strings/match.cc +0 -133
  810. package/deps/abseil-cpp/absl/strings/match.h +0 -129
  811. package/deps/abseil-cpp/absl/strings/match_test.cc +0 -291
  812. package/deps/abseil-cpp/absl/strings/numbers.cc +0 -1230
  813. package/deps/abseil-cpp/absl/strings/numbers.h +0 -359
  814. package/deps/abseil-cpp/absl/strings/numbers_benchmark.cc +0 -288
  815. package/deps/abseil-cpp/absl/strings/numbers_test.cc +0 -2324
  816. package/deps/abseil-cpp/absl/strings/resize_and_overwrite.h +0 -194
  817. package/deps/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +0 -154
  818. package/deps/abseil-cpp/absl/strings/str_cat.cc +0 -247
  819. package/deps/abseil-cpp/absl/strings/str_cat.h +0 -633
  820. package/deps/abseil-cpp/absl/strings/str_cat_benchmark.cc +0 -288
  821. package/deps/abseil-cpp/absl/strings/str_cat_test.cc +0 -692
  822. package/deps/abseil-cpp/absl/strings/str_format.h +0 -887
  823. package/deps/abseil-cpp/absl/strings/str_format_test.cc +0 -1230
  824. package/deps/abseil-cpp/absl/strings/str_join.h +0 -301
  825. package/deps/abseil-cpp/absl/strings/str_join_benchmark.cc +0 -106
  826. package/deps/abseil-cpp/absl/strings/str_join_test.cc +0 -645
  827. package/deps/abseil-cpp/absl/strings/str_replace.cc +0 -91
  828. package/deps/abseil-cpp/absl/strings/str_replace.h +0 -222
  829. package/deps/abseil-cpp/absl/strings/str_replace_benchmark.cc +0 -121
  830. package/deps/abseil-cpp/absl/strings/str_replace_test.cc +0 -345
  831. package/deps/abseil-cpp/absl/strings/str_split.cc +0 -144
  832. package/deps/abseil-cpp/absl/strings/str_split.h +0 -582
  833. package/deps/abseil-cpp/absl/strings/str_split_benchmark.cc +0 -180
  834. package/deps/abseil-cpp/absl/strings/str_split_test.cc +0 -1069
  835. package/deps/abseil-cpp/absl/strings/string_view.h +0 -60
  836. package/deps/abseil-cpp/absl/strings/string_view_test.cc +0 -86
  837. package/deps/abseil-cpp/absl/strings/strip.h +0 -99
  838. package/deps/abseil-cpp/absl/strings/strip_test.cc +0 -198
  839. package/deps/abseil-cpp/absl/strings/substitute.cc +0 -187
  840. package/deps/abseil-cpp/absl/strings/substitute.h +0 -769
  841. package/deps/abseil-cpp/absl/strings/substitute_benchmark.cc +0 -158
  842. package/deps/abseil-cpp/absl/strings/substitute_test.cc +0 -288
  843. package/deps/abseil-cpp/absl/synchronization/BUILD.bazel +0 -410
  844. package/deps/abseil-cpp/absl/synchronization/CMakeLists.txt +0 -293
  845. package/deps/abseil-cpp/absl/synchronization/barrier.cc +0 -52
  846. package/deps/abseil-cpp/absl/synchronization/barrier.h +0 -79
  847. package/deps/abseil-cpp/absl/synchronization/barrier_test.cc +0 -75
  848. package/deps/abseil-cpp/absl/synchronization/blocking_counter.cc +0 -73
  849. package/deps/abseil-cpp/absl/synchronization/blocking_counter.h +0 -107
  850. package/deps/abseil-cpp/absl/synchronization/blocking_counter_benchmark.cc +0 -84
  851. package/deps/abseil-cpp/absl/synchronization/blocking_counter_test.cc +0 -146
  852. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +0 -152
  853. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -56
  854. package/deps/abseil-cpp/absl/synchronization/internal/futex.h +0 -177
  855. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -107
  856. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.h +0 -63
  857. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.cc +0 -714
  858. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.h +0 -146
  859. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +0 -43
  860. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +0 -483
  861. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -220
  862. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +0 -178
  863. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +0 -406
  864. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -106
  865. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +0 -119
  866. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem_test.cc +0 -194
  867. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -163
  868. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +0 -60
  869. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -118
  870. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.h +0 -65
  871. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -87
  872. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +0 -56
  873. package/deps/abseil-cpp/absl/synchronization/internal/thread_pool.h +0 -96
  874. package/deps/abseil-cpp/absl/synchronization/internal/waiter.h +0 -69
  875. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -38
  876. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.h +0 -90
  877. package/deps/abseil-cpp/absl/synchronization/internal/waiter_test.cc +0 -192
  878. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -147
  879. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.h +0 -72
  880. package/deps/abseil-cpp/absl/synchronization/lifetime_test.cc +0 -180
  881. package/deps/abseil-cpp/absl/synchronization/mutex.cc +0 -2820
  882. package/deps/abseil-cpp/absl/synchronization/mutex.h +0 -1352
  883. package/deps/abseil-cpp/absl/synchronization/mutex_benchmark.cc +0 -321
  884. package/deps/abseil-cpp/absl/synchronization/mutex_method_pointer_test.cc +0 -138
  885. package/deps/abseil-cpp/absl/synchronization/mutex_test.cc +0 -2065
  886. package/deps/abseil-cpp/absl/synchronization/notification.cc +0 -85
  887. package/deps/abseil-cpp/absl/synchronization/notification.h +0 -133
  888. package/deps/abseil-cpp/absl/synchronization/notification_test.cc +0 -230
  889. package/deps/abseil-cpp/absl/time/BUILD.bazel +0 -244
  890. package/deps/abseil-cpp/absl/time/CMakeLists.txt +0 -218
  891. package/deps/abseil-cpp/absl/time/civil_time.cc +0 -200
  892. package/deps/abseil-cpp/absl/time/civil_time.h +0 -589
  893. package/deps/abseil-cpp/absl/time/civil_time_benchmark.cc +0 -129
  894. package/deps/abseil-cpp/absl/time/civil_time_test.cc +0 -1351
  895. package/deps/abseil-cpp/absl/time/clock.cc +0 -603
  896. package/deps/abseil-cpp/absl/time/clock.h +0 -78
  897. package/deps/abseil-cpp/absl/time/clock_benchmark.cc +0 -74
  898. package/deps/abseil-cpp/absl/time/clock_interface.cc +0 -71
  899. package/deps/abseil-cpp/absl/time/clock_interface.h +0 -91
  900. package/deps/abseil-cpp/absl/time/clock_interface_test.cc +0 -128
  901. package/deps/abseil-cpp/absl/time/clock_test.cc +0 -122
  902. package/deps/abseil-cpp/absl/time/duration.cc +0 -918
  903. package/deps/abseil-cpp/absl/time/duration_benchmark.cc +0 -608
  904. package/deps/abseil-cpp/absl/time/duration_test.cc +0 -1901
  905. package/deps/abseil-cpp/absl/time/flag_test.cc +0 -147
  906. package/deps/abseil-cpp/absl/time/format.cc +0 -162
  907. package/deps/abseil-cpp/absl/time/format_benchmark.cc +0 -64
  908. package/deps/abseil-cpp/absl/time/format_test.cc +0 -441
  909. package/deps/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +0 -195
  910. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +0 -332
  911. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +0 -644
  912. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +0 -460
  913. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +0 -102
  914. package/deps/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +0 -436
  915. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +0 -94
  916. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_test.cc +0 -1066
  917. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +0 -515
  918. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +0 -33
  919. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +0 -140
  920. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +0 -52
  921. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +0 -1068
  922. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +0 -1773
  923. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +0 -47
  924. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +0 -80
  925. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +0 -115
  926. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +0 -97
  927. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +0 -1070
  928. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +0 -128
  929. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +0 -333
  930. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +0 -60
  931. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +0 -217
  932. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +0 -918
  933. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +0 -186
  934. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +0 -37
  935. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +0 -159
  936. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +0 -132
  937. package/deps/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +0 -120
  938. package/deps/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +0 -116
  939. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/README.zoneinfo +0 -38
  940. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/version +0 -1
  941. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Abidjan +0 -0
  942. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Accra +0 -0
  943. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Addis_Ababa +0 -0
  944. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Algiers +0 -0
  945. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmara +0 -0
  946. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmera +0 -0
  947. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bamako +0 -0
  948. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bangui +0 -0
  949. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Banjul +0 -0
  950. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bissau +0 -0
  951. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Blantyre +0 -0
  952. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Brazzaville +0 -0
  953. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bujumbura +0 -0
  954. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Cairo +0 -0
  955. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Casablanca +0 -0
  956. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ceuta +0 -0
  957. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Conakry +0 -0
  958. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dakar +0 -0
  959. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dar_es_Salaam +0 -0
  960. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Djibouti +0 -0
  961. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Douala +0 -0
  962. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/El_Aaiun +0 -0
  963. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Freetown +0 -0
  964. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Gaborone +0 -0
  965. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Harare +0 -0
  966. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Johannesburg +0 -0
  967. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Juba +0 -0
  968. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kampala +0 -0
  969. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Khartoum +0 -0
  970. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kigali +0 -0
  971. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kinshasa +0 -0
  972. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lagos +0 -0
  973. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Libreville +0 -0
  974. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lome +0 -0
  975. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Luanda +0 -0
  976. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lubumbashi +0 -0
  977. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lusaka +0 -0
  978. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Malabo +0 -0
  979. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maputo +0 -0
  980. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maseru +0 -0
  981. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mbabane +0 -0
  982. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mogadishu +0 -0
  983. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Monrovia +0 -0
  984. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nairobi +0 -0
  985. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ndjamena +0 -0
  986. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Niamey +0 -0
  987. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nouakchott +0 -0
  988. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ouagadougou +0 -0
  989. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Porto-Novo +0 -0
  990. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Sao_Tome +0 -0
  991. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Timbuktu +0 -0
  992. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tripoli +0 -0
  993. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tunis +0 -0
  994. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Windhoek +0 -0
  995. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Adak +0 -0
  996. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anchorage +0 -0
  997. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anguilla +0 -0
  998. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Antigua +0 -0
  999. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Araguaina +0 -0
  1000. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  1001. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Catamarca +0 -0
  1002. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/ComodRivadavia +0 -0
  1003. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Cordoba +0 -0
  1004. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Jujuy +0 -0
  1005. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/La_Rioja +0 -0
  1006. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Mendoza +0 -0
  1007. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Rio_Gallegos +0 -0
  1008. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Salta +0 -0
  1009. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Juan +0 -0
  1010. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Luis +0 -0
  1011. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Tucuman +0 -0
  1012. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Ushuaia +0 -0
  1013. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Aruba +0 -0
  1014. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion +0 -0
  1015. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atikokan +0 -0
  1016. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atka +0 -0
  1017. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia +0 -0
  1018. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas +0 -0
  1019. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Barbados +0 -0
  1020. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belem +0 -0
  1021. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belize +0 -0
  1022. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Blanc-Sablon +0 -0
  1023. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boa_Vista +0 -0
  1024. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bogota +0 -0
  1025. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boise +0 -0
  1026. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Buenos_Aires +0 -0
  1027. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cambridge_Bay +0 -0
  1028. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Campo_Grande +0 -0
  1029. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cancun +0 -0
  1030. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Caracas +0 -0
  1031. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Catamarca +0 -0
  1032. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayenne +0 -0
  1033. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayman +0 -0
  1034. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chicago +0 -0
  1035. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua +0 -0
  1036. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ciudad_Juarez +0 -0
  1037. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coral_Harbour +0 -0
  1038. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cordoba +0 -0
  1039. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Costa_Rica +0 -0
  1040. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  1041. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Creston +0 -0
  1042. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cuiaba +0 -0
  1043. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Curacao +0 -0
  1044. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Danmarkshavn +0 -0
  1045. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson +0 -0
  1046. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson_Creek +0 -0
  1047. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Denver +0 -0
  1048. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Detroit +0 -0
  1049. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dominica +0 -0
  1050. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Edmonton +0 -0
  1051. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Eirunepe +0 -0
  1052. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/El_Salvador +0 -0
  1053. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  1054. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Nelson +0 -0
  1055. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Wayne +0 -0
  1056. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fortaleza +0 -0
  1057. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Glace_Bay +0 -0
  1058. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Godthab +0 -0
  1059. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Goose_Bay +0 -0
  1060. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grand_Turk +0 -0
  1061. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grenada +0 -0
  1062. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guadeloupe +0 -0
  1063. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guatemala +0 -0
  1064. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guayaquil +0 -0
  1065. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guyana +0 -0
  1066. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Halifax +0 -0
  1067. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Havana +0 -0
  1068. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Hermosillo +0 -0
  1069. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Indianapolis +0 -0
  1070. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Knox +0 -0
  1071. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Marengo +0 -0
  1072. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Petersburg +0 -0
  1073. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Tell_City +0 -0
  1074. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vevay +0 -0
  1075. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vincennes +0 -0
  1076. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Winamac +0 -0
  1077. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indianapolis +0 -0
  1078. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Inuvik +0 -0
  1079. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Iqaluit +0 -0
  1080. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jamaica +0 -0
  1081. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jujuy +0 -0
  1082. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Juneau +0 -0
  1083. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Louisville +0 -0
  1084. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Monticello +0 -0
  1085. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Knox_IN +0 -0
  1086. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kralendijk +0 -0
  1087. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/La_Paz +0 -0
  1088. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lima +0 -0
  1089. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Los_Angeles +0 -0
  1090. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Louisville +0 -0
  1091. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lower_Princes +0 -0
  1092. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Maceio +0 -0
  1093. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Managua +0 -0
  1094. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Manaus +0 -0
  1095. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Marigot +0 -0
  1096. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Martinique +0 -0
  1097. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Matamoros +0 -0
  1098. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan +0 -0
  1099. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mendoza +0 -0
  1100. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Menominee +0 -0
  1101. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida +0 -0
  1102. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla +0 -0
  1103. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City +0 -0
  1104. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Miquelon +0 -0
  1105. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Moncton +0 -0
  1106. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey +0 -0
  1107. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montevideo +0 -0
  1108. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montreal +0 -0
  1109. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montserrat +0 -0
  1110. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nassau +0 -0
  1111. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/New_York +0 -0
  1112. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon +0 -0
  1113. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nome +0 -0
  1114. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Noronha +0 -0
  1115. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Beulah +0 -0
  1116. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Center +0 -0
  1117. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/New_Salem +0 -0
  1118. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nuuk +0 -0
  1119. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga +0 -0
  1120. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Panama +0 -0
  1121. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Pangnirtung +0 -0
  1122. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Paramaribo +0 -0
  1123. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Phoenix +0 -0
  1124. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port-au-Prince +0 -0
  1125. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port_of_Spain +0 -0
  1126. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Acre +0 -0
  1127. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Velho +0 -0
  1128. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Puerto_Rico +0 -0
  1129. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Punta_Arenas +0 -0
  1130. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River +0 -0
  1131. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rankin_Inlet +0 -0
  1132. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Recife +0 -0
  1133. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Regina +0 -0
  1134. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Resolute +0 -0
  1135. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rio_Branco +0 -0
  1136. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rosario +0 -0
  1137. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  1138. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santarem +0 -0
  1139. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santiago +0 -0
  1140. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santo_Domingo +0 -0
  1141. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sao_Paulo +0 -0
  1142. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Scoresbysund +0 -0
  1143. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Shiprock +0 -0
  1144. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sitka +0 -0
  1145. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Barthelemy +0 -0
  1146. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Johns +0 -0
  1147. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Kitts +0 -0
  1148. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Lucia +0 -0
  1149. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Thomas +0 -0
  1150. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Vincent +0 -0
  1151. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Swift_Current +0 -0
  1152. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tegucigalpa +0 -0
  1153. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thule +0 -0
  1154. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay +0 -0
  1155. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  1156. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Toronto +0 -0
  1157. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tortola +0 -0
  1158. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  1159. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Virgin +0 -0
  1160. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Whitehorse +0 -0
  1161. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Winnipeg +0 -0
  1162. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yakutat +0 -0
  1163. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yellowknife +0 -0
  1164. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Casey +0 -0
  1165. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Davis +0 -0
  1166. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/DumontDUrville +0 -0
  1167. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Macquarie +0 -0
  1168. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Mawson +0 -0
  1169. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/McMurdo +0 -0
  1170. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Palmer +0 -0
  1171. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Rothera +0 -0
  1172. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/South_Pole +0 -0
  1173. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Syowa +0 -0
  1174. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Troll +0 -0
  1175. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Vostok +0 -0
  1176. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Arctic/Longyearbyen +0 -0
  1177. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aden +0 -0
  1178. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Almaty +0 -0
  1179. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Amman +0 -0
  1180. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Anadyr +0 -0
  1181. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtau +0 -0
  1182. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtobe +0 -0
  1183. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashgabat +0 -0
  1184. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashkhabad +0 -0
  1185. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Atyrau +0 -0
  1186. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baghdad +0 -0
  1187. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bahrain +0 -0
  1188. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baku +0 -0
  1189. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bangkok +0 -0
  1190. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Barnaul +0 -0
  1191. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Beirut +0 -0
  1192. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bishkek +0 -0
  1193. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Brunei +0 -0
  1194. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Calcutta +0 -0
  1195. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chita +0 -0
  1196. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Choibalsan +0 -0
  1197. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chongqing +0 -0
  1198. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chungking +0 -0
  1199. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Colombo +0 -0
  1200. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dacca +0 -0
  1201. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Damascus +0 -0
  1202. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dhaka +0 -0
  1203. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dili +0 -0
  1204. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dubai +0 -0
  1205. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dushanbe +0 -0
  1206. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Famagusta +0 -0
  1207. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza +0 -0
  1208. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Harbin +0 -0
  1209. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron +0 -0
  1210. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  1211. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hong_Kong +0 -0
  1212. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hovd +0 -0
  1213. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Irkutsk +0 -0
  1214. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Istanbul +0 -0
  1215. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jakarta +0 -0
  1216. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jayapura +0 -0
  1217. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem +0 -0
  1218. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kabul +0 -0
  1219. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kamchatka +0 -0
  1220. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Karachi +0 -0
  1221. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kashgar +0 -0
  1222. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kathmandu +0 -0
  1223. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Katmandu +0 -0
  1224. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Khandyga +0 -0
  1225. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kolkata +0 -0
  1226. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Krasnoyarsk +0 -0
  1227. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuala_Lumpur +0 -0
  1228. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuching +0 -0
  1229. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuwait +0 -0
  1230. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macao +0 -0
  1231. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macau +0 -0
  1232. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Magadan +0 -0
  1233. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Makassar +0 -0
  1234. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila +0 -0
  1235. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Muscat +0 -0
  1236. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Nicosia +0 -0
  1237. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novokuznetsk +0 -0
  1238. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novosibirsk +0 -0
  1239. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Omsk +0 -0
  1240. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Oral +0 -0
  1241. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  1242. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pontianak +0 -0
  1243. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pyongyang +0 -0
  1244. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qatar +0 -0
  1245. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qostanay +0 -0
  1246. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qyzylorda +0 -0
  1247. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Rangoon +0 -0
  1248. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Riyadh +0 -0
  1249. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  1250. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Sakhalin +0 -0
  1251. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Samarkand +0 -0
  1252. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Seoul +0 -0
  1253. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Shanghai +0 -0
  1254. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Singapore +0 -0
  1255. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Srednekolymsk +0 -0
  1256. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Taipei +0 -0
  1257. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tashkent +0 -0
  1258. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  1259. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  1260. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv +0 -0
  1261. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimbu +0 -0
  1262. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimphu +0 -0
  1263. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tokyo +0 -0
  1264. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tomsk +0 -0
  1265. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ujung_Pandang +0 -0
  1266. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulaanbaatar +0 -0
  1267. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulan_Bator +0 -0
  1268. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Urumqi +0 -0
  1269. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ust-Nera +0 -0
  1270. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  1271. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vladivostok +0 -0
  1272. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yakutsk +0 -0
  1273. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yangon +0 -0
  1274. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yekaterinburg +0 -0
  1275. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yerevan +0 -0
  1276. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Azores +0 -0
  1277. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Bermuda +0 -0
  1278. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Canary +0 -0
  1279. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Cape_Verde +0 -0
  1280. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faeroe +0 -0
  1281. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faroe +0 -0
  1282. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Jan_Mayen +0 -0
  1283. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Madeira +0 -0
  1284. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Reykjavik +0 -0
  1285. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/South_Georgia +0 -0
  1286. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/St_Helena +0 -0
  1287. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Stanley +0 -0
  1288. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/ACT +0 -0
  1289. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Adelaide +0 -0
  1290. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Brisbane +0 -0
  1291. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Broken_Hill +0 -0
  1292. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Canberra +0 -0
  1293. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Currie +0 -0
  1294. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Darwin +0 -0
  1295. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Eucla +0 -0
  1296. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Hobart +0 -0
  1297. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/LHI +0 -0
  1298. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lindeman +0 -0
  1299. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lord_Howe +0 -0
  1300. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Melbourne +0 -0
  1301. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/NSW +0 -0
  1302. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/North +0 -0
  1303. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Perth +0 -0
  1304. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Queensland +0 -0
  1305. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/South +0 -0
  1306. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Sydney +0 -0
  1307. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Tasmania +0 -0
  1308. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Victoria +0 -0
  1309. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/West +0 -0
  1310. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Yancowinna +0 -0
  1311. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/Acre +0 -0
  1312. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/DeNoronha +0 -0
  1313. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/East +0 -0
  1314. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/West +0 -0
  1315. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CET +0 -0
  1316. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CST6CDT +0 -0
  1317. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Atlantic +0 -0
  1318. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Central +0 -0
  1319. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Eastern +0 -0
  1320. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Mountain +0 -0
  1321. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Newfoundland +0 -0
  1322. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  1323. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Saskatchewan +0 -0
  1324. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Yukon +0 -0
  1325. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/Continental +0 -0
  1326. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/EasterIsland +0 -0
  1327. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Cuba +0 -0
  1328. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EET +0 -0
  1329. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST +0 -0
  1330. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST5EDT +0 -0
  1331. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Egypt +0 -0
  1332. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Eire +0 -0
  1333. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT +0 -0
  1334. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+0 +0 -0
  1335. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+1 +0 -0
  1336. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+10 +0 -0
  1337. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+11 +0 -0
  1338. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+12 +0 -0
  1339. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+2 +0 -0
  1340. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+3 +0 -0
  1341. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+4 +0 -0
  1342. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+5 +0 -0
  1343. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+6 +0 -0
  1344. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+7 +0 -0
  1345. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+8 +0 -0
  1346. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+9 +0 -0
  1347. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-0 +0 -0
  1348. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-1 +0 -0
  1349. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-10 +0 -0
  1350. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-11 +0 -0
  1351. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-12 +0 -0
  1352. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-13 +0 -0
  1353. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-14 +0 -0
  1354. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-2 +0 -0
  1355. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-3 +0 -0
  1356. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-4 +0 -0
  1357. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-5 +0 -0
  1358. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-6 +0 -0
  1359. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-7 +0 -0
  1360. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-8 +0 -0
  1361. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-9 +0 -0
  1362. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT0 +0 -0
  1363. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Greenwich +0 -0
  1364. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT +0 -0
  1365. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UTC +0 -0
  1366. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Universal +0 -0
  1367. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Zulu +0 -0
  1368. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Amsterdam +0 -0
  1369. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Andorra +0 -0
  1370. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Astrakhan +0 -0
  1371. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Athens +0 -0
  1372. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belfast +0 -0
  1373. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belgrade +0 -0
  1374. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Berlin +0 -0
  1375. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bratislava +0 -0
  1376. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Brussels +0 -0
  1377. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bucharest +0 -0
  1378. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Budapest +0 -0
  1379. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Busingen +0 -0
  1380. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  1381. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Copenhagen +0 -0
  1382. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Dublin +0 -0
  1383. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Gibraltar +0 -0
  1384. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Guernsey +0 -0
  1385. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Helsinki +0 -0
  1386. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Isle_of_Man +0 -0
  1387. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Istanbul +0 -0
  1388. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Jersey +0 -0
  1389. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kaliningrad +0 -0
  1390. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kiev +0 -0
  1391. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kirov +0 -0
  1392. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kyiv +0 -0
  1393. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Lisbon +0 -0
  1394. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ljubljana +0 -0
  1395. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/London +0 -0
  1396. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Luxembourg +0 -0
  1397. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Madrid +0 -0
  1398. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Malta +0 -0
  1399. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Mariehamn +0 -0
  1400. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Minsk +0 -0
  1401. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Monaco +0 -0
  1402. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Moscow +0 -0
  1403. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Nicosia +0 -0
  1404. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Oslo +0 -0
  1405. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Paris +0 -0
  1406. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Podgorica +0 -0
  1407. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Prague +0 -0
  1408. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Riga +0 -0
  1409. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Rome +0 -0
  1410. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Samara +0 -0
  1411. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/San_Marino +0 -0
  1412. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sarajevo +0 -0
  1413. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Saratov +0 -0
  1414. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Simferopol +0 -0
  1415. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Skopje +0 -0
  1416. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sofia +0 -0
  1417. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Stockholm +0 -0
  1418. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tallinn +0 -0
  1419. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tirane +0 -0
  1420. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  1421. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ulyanovsk +0 -0
  1422. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Uzhgorod +0 -0
  1423. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vaduz +0 -0
  1424. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vatican +0 -0
  1425. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vienna +0 -0
  1426. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vilnius +0 -0
  1427. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Volgograd +0 -0
  1428. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Warsaw +0 -0
  1429. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zagreb +0 -0
  1430. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zaporozhye +0 -0
  1431. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zurich +0 -0
  1432. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Factory +0 -0
  1433. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB +0 -0
  1434. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB-Eire +0 -0
  1435. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT +0 -0
  1436. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT+0 +0 -0
  1437. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT-0 +0 -0
  1438. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT0 +0 -0
  1439. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Greenwich +0 -0
  1440. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/HST +0 -0
  1441. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Hongkong +0 -0
  1442. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iceland +0 -0
  1443. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Antananarivo +0 -0
  1444. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Chagos +0 -0
  1445. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Christmas +0 -0
  1446. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Cocos +0 -0
  1447. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Comoro +0 -0
  1448. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Kerguelen +0 -0
  1449. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mahe +0 -0
  1450. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Maldives +0 -0
  1451. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mauritius +0 -0
  1452. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mayotte +0 -0
  1453. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Reunion +0 -0
  1454. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  1455. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Israel +0 -0
  1456. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Jamaica +0 -0
  1457. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Japan +0 -0
  1458. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Kwajalein +0 -0
  1459. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Libya +0 -0
  1460. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MET +0 -0
  1461. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST +0 -0
  1462. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST7MDT +0 -0
  1463. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  1464. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur +0 -0
  1465. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General +0 -0
  1466. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ +0 -0
  1467. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ-CHAT +0 -0
  1468. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Navajo +0 -0
  1469. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PRC +0 -0
  1470. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PST8PDT +0 -0
  1471. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Apia +0 -0
  1472. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Auckland +0 -0
  1473. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Bougainville +0 -0
  1474. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chatham +0 -0
  1475. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chuuk +0 -0
  1476. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Easter +0 -0
  1477. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Efate +0 -0
  1478. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Enderbury +0 -0
  1479. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fakaofo +0 -0
  1480. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji +0 -0
  1481. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Funafuti +0 -0
  1482. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Galapagos +0 -0
  1483. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Gambier +0 -0
  1484. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guadalcanal +0 -0
  1485. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guam +0 -0
  1486. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Honolulu +0 -0
  1487. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Johnston +0 -0
  1488. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kanton +0 -0
  1489. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kiritimati +0 -0
  1490. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kosrae +0 -0
  1491. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kwajalein +0 -0
  1492. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Majuro +0 -0
  1493. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Marquesas +0 -0
  1494. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Midway +0 -0
  1495. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Nauru +0 -0
  1496. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Niue +0 -0
  1497. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Norfolk +0 -0
  1498. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Noumea +0 -0
  1499. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pago_Pago +0 -0
  1500. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Palau +0 -0
  1501. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pitcairn +0 -0
  1502. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pohnpei +0 -0
  1503. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Ponape +0 -0
  1504. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Port_Moresby +0 -0
  1505. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Rarotonga +0 -0
  1506. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Saipan +0 -0
  1507. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Samoa +0 -0
  1508. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tahiti +0 -0
  1509. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tarawa +0 -0
  1510. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tongatapu +0 -0
  1511. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Truk +0 -0
  1512. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wake +0 -0
  1513. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wallis +0 -0
  1514. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Yap +0 -0
  1515. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Poland +0 -0
  1516. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Portugal +0 -0
  1517. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROC +0 -0
  1518. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROK +0 -0
  1519. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Singapore +0 -0
  1520. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Turkey +0 -0
  1521. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UCT +0 -0
  1522. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Alaska +0 -0
  1523. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Aleutian +0 -0
  1524. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Arizona +0 -0
  1525. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Central +0 -0
  1526. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/East-Indiana +0 -0
  1527. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Eastern +0 -0
  1528. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Hawaii +0 -0
  1529. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Indiana-Starke +0 -0
  1530. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Michigan +0 -0
  1531. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Mountain +0 -0
  1532. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Pacific +0 -0
  1533. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Samoa +0 -0
  1534. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UTC +0 -0
  1535. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Universal +0 -0
  1536. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/W-SU +0 -0
  1537. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/WET +0 -0
  1538. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Zulu +0 -0
  1539. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +0 -279
  1540. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +0 -375
  1541. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +0 -296
  1542. package/deps/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +0 -31
  1543. package/deps/abseil-cpp/absl/time/internal/get_current_time_posix.inc +0 -24
  1544. package/deps/abseil-cpp/absl/time/internal/test_util.cc +0 -32
  1545. package/deps/abseil-cpp/absl/time/internal/test_util.h +0 -33
  1546. package/deps/abseil-cpp/absl/time/simulated_clock.cc +0 -225
  1547. package/deps/abseil-cpp/absl/time/simulated_clock.h +0 -108
  1548. package/deps/abseil-cpp/absl/time/simulated_clock_test.cc +0 -614
  1549. package/deps/abseil-cpp/absl/time/time.cc +0 -507
  1550. package/deps/abseil-cpp/absl/time/time.h +0 -1926
  1551. package/deps/abseil-cpp/absl/time/time_benchmark.cc +0 -321
  1552. package/deps/abseil-cpp/absl/time/time_test.cc +0 -1365
  1553. package/deps/abseil-cpp/absl/time/time_zone_test.cc +0 -97
  1554. package/deps/abseil-cpp/absl/types/BUILD.bazel +0 -166
  1555. package/deps/abseil-cpp/absl/types/CMakeLists.txt +0 -179
  1556. package/deps/abseil-cpp/absl/types/any.h +0 -44
  1557. package/deps/abseil-cpp/absl/types/compare.h +0 -506
  1558. package/deps/abseil-cpp/absl/types/compare_test.cc +0 -300
  1559. package/deps/abseil-cpp/absl/types/internal/span.h +0 -141
  1560. package/deps/abseil-cpp/absl/types/optional.h +0 -41
  1561. package/deps/abseil-cpp/absl/types/span.h +0 -830
  1562. package/deps/abseil-cpp/absl/types/span_test.cc +0 -915
  1563. package/deps/abseil-cpp/absl/types/variant.h +0 -82
  1564. package/deps/abseil-cpp/absl/types/variant_test.cc +0 -164
  1565. package/deps/abseil-cpp/absl/utility/BUILD.bazel +0 -46
  1566. package/deps/abseil-cpp/absl/utility/CMakeLists.txt +0 -28
  1567. package/deps/abseil-cpp/absl/utility/utility.h +0 -68
  1568. package/deps/abseil-cpp/ci/absl_alternate_options.h +0 -28
  1569. package/deps/abseil-cpp/ci/cmake_common.sh +0 -19
  1570. package/deps/abseil-cpp/ci/cmake_install_test.sh +0 -64
  1571. package/deps/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +0 -106
  1572. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +0 -114
  1573. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +0 -107
  1574. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +0 -106
  1575. package/deps/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +0 -104
  1576. package/deps/abseil-cpp/ci/linux_docker_containers.sh +0 -22
  1577. package/deps/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +0 -100
  1578. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +0 -105
  1579. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +0 -85
  1580. package/deps/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +0 -85
  1581. package/deps/abseil-cpp/ci/macos_xcode_bazel.sh +0 -70
  1582. package/deps/abseil-cpp/ci/macos_xcode_cmake.sh +0 -78
  1583. package/deps/abseil-cpp/ci/windows_clangcl_bazel.bat +0 -70
  1584. package/deps/abseil-cpp/ci/windows_msvc_bazel.bat +0 -61
  1585. package/deps/abseil-cpp/ci/windows_msvc_cmake.bat +0 -69
  1586. package/deps/abseil-cpp/conanfile.py +0 -51
  1587. package/deps/abseil-cpp/create_lts.py +0 -139
  1588. package/deps/re2/.bazelrc +0 -20
  1589. package/deps/re2/.bcr/metadata.template.json +0 -16
  1590. package/deps/re2/.bcr/presubmit.yml +0 -57
  1591. package/deps/re2/.bcr/source.template.json +0 -5
  1592. package/deps/re2/BUILD.bazel +0 -463
  1593. package/deps/re2/CMakeLists.txt +0 -283
  1594. package/deps/re2/LICENSE +0 -27
  1595. package/deps/re2/MODULE.bazel +0 -29
  1596. package/deps/re2/Makefile +0 -408
  1597. package/deps/re2/WORKSPACE.bazel +0 -7
  1598. package/deps/re2/WORKSPACE.bzlmod +0 -7
  1599. package/deps/re2/app/BUILD.bazel +0 -24
  1600. package/deps/re2/app/_re2.cc +0 -94
  1601. package/deps/re2/app/_re2.d.ts +0 -23
  1602. package/deps/re2/app/app.ts +0 -111
  1603. package/deps/re2/app/build.sh +0 -32
  1604. package/deps/re2/app/index.html +0 -5
  1605. package/deps/re2/app/package.json +0 -14
  1606. package/deps/re2/app/rollup.config.js +0 -28
  1607. package/deps/re2/app/tsconfig.json +0 -17
  1608. package/deps/re2/benchlog/benchplot.py +0 -98
  1609. package/deps/re2/benchlog/mktable +0 -155
  1610. package/deps/re2/doc/mksyntaxgo +0 -42
  1611. package/deps/re2/doc/mksyntaxhtml +0 -42
  1612. package/deps/re2/doc/mksyntaxwiki +0 -36
  1613. package/deps/re2/doc/syntax.html +0 -477
  1614. package/deps/re2/doc/syntax.txt +0 -463
  1615. package/deps/re2/lib/git/commit-msg.hook +0 -104
  1616. package/deps/re2/libre2.symbols +0 -16
  1617. package/deps/re2/libre2.symbols.darwin +0 -12
  1618. package/deps/re2/python/BUILD.bazel +0 -80
  1619. package/deps/re2/python/_re2.cc +0 -352
  1620. package/deps/re2/python/re2.py +0 -583
  1621. package/deps/re2/python/re2_test.py +0 -495
  1622. package/deps/re2/python/setup.py +0 -159
  1623. package/deps/re2/python/toolchains/generate.py +0 -100
  1624. package/deps/re2/re2/bitmap256.cc +0 -43
  1625. package/deps/re2/re2/bitmap256.h +0 -88
  1626. package/deps/re2/re2/bitstate.cc +0 -389
  1627. package/deps/re2/re2/compile.cc +0 -1265
  1628. package/deps/re2/re2/dfa.cc +0 -2135
  1629. package/deps/re2/re2/filtered_re2.cc +0 -138
  1630. package/deps/re2/re2/filtered_re2.h +0 -115
  1631. package/deps/re2/re2/fuzzing/re2_fuzzer.cc +0 -284
  1632. package/deps/re2/re2/make_perl_groups.pl +0 -116
  1633. package/deps/re2/re2/make_unicode_casefold.py +0 -151
  1634. package/deps/re2/re2/make_unicode_groups.py +0 -117
  1635. package/deps/re2/re2/mimics_pcre.cc +0 -196
  1636. package/deps/re2/re2/nfa.cc +0 -714
  1637. package/deps/re2/re2/onepass.cc +0 -623
  1638. package/deps/re2/re2/parse.cc +0 -2529
  1639. package/deps/re2/re2/perl_groups.cc +0 -119
  1640. package/deps/re2/re2/pod_array.h +0 -55
  1641. package/deps/re2/re2/prefilter.cc +0 -711
  1642. package/deps/re2/re2/prefilter.h +0 -168
  1643. package/deps/re2/re2/prefilter_tree.cc +0 -376
  1644. package/deps/re2/re2/prefilter_tree.h +0 -153
  1645. package/deps/re2/re2/prog.cc +0 -1181
  1646. package/deps/re2/re2/prog.h +0 -493
  1647. package/deps/re2/re2/re2.cc +0 -1355
  1648. package/deps/re2/re2/re2.h +0 -1074
  1649. package/deps/re2/re2/regexp.cc +0 -1004
  1650. package/deps/re2/re2/regexp.h +0 -693
  1651. package/deps/re2/re2/set.cc +0 -185
  1652. package/deps/re2/re2/set.h +0 -91
  1653. package/deps/re2/re2/simplify.cc +0 -689
  1654. package/deps/re2/re2/sparse_array.h +0 -394
  1655. package/deps/re2/re2/sparse_set.h +0 -266
  1656. package/deps/re2/re2/stringpiece.h +0 -18
  1657. package/deps/re2/re2/testing/backtrack.cc +0 -274
  1658. package/deps/re2/re2/testing/charclass_test.cc +0 -228
  1659. package/deps/re2/re2/testing/compile_test.cc +0 -431
  1660. package/deps/re2/re2/testing/dfa_test.cc +0 -376
  1661. package/deps/re2/re2/testing/dump.cc +0 -172
  1662. package/deps/re2/re2/testing/exhaustive1_test.cc +0 -40
  1663. package/deps/re2/re2/testing/exhaustive2_test.cc +0 -72
  1664. package/deps/re2/re2/testing/exhaustive3_test.cc +0 -100
  1665. package/deps/re2/re2/testing/exhaustive_test.cc +0 -35
  1666. package/deps/re2/re2/testing/exhaustive_tester.cc +0 -204
  1667. package/deps/re2/re2/testing/exhaustive_tester.h +0 -105
  1668. package/deps/re2/re2/testing/filtered_re2_test.cc +0 -343
  1669. package/deps/re2/re2/testing/mimics_pcre_test.cc +0 -79
  1670. package/deps/re2/re2/testing/null_walker.cc +0 -48
  1671. package/deps/re2/re2/testing/parse_test.cc +0 -586
  1672. package/deps/re2/re2/testing/possible_match_test.cc +0 -251
  1673. package/deps/re2/re2/testing/random_test.cc +0 -102
  1674. package/deps/re2/re2/testing/re2_arg_test.cc +0 -182
  1675. package/deps/re2/re2/testing/re2_test.cc +0 -1699
  1676. package/deps/re2/re2/testing/regexp_benchmark.cc +0 -1605
  1677. package/deps/re2/re2/testing/regexp_generator.cc +0 -284
  1678. package/deps/re2/re2/testing/regexp_generator.h +0 -77
  1679. package/deps/re2/re2/testing/regexp_test.cc +0 -87
  1680. package/deps/re2/re2/testing/required_prefix_test.cc +0 -201
  1681. package/deps/re2/re2/testing/search_test.cc +0 -338
  1682. package/deps/re2/re2/testing/set_test.cc +0 -235
  1683. package/deps/re2/re2/testing/simplify_test.cc +0 -289
  1684. package/deps/re2/re2/testing/string_generator.cc +0 -144
  1685. package/deps/re2/re2/testing/string_generator.h +0 -76
  1686. package/deps/re2/re2/testing/string_generator_test.cc +0 -114
  1687. package/deps/re2/re2/testing/tester.cc +0 -690
  1688. package/deps/re2/re2/testing/tester.h +0 -121
  1689. package/deps/re2/re2/tostring.cc +0 -351
  1690. package/deps/re2/re2/unicode.py +0 -284
  1691. package/deps/re2/re2/unicode_casefold.cc +0 -604
  1692. package/deps/re2/re2/unicode_casefold.h +0 -77
  1693. package/deps/re2/re2/unicode_groups.cc +0 -6517
  1694. package/deps/re2/re2/unicode_groups.h +0 -66
  1695. package/deps/re2/re2/walker-inl.h +0 -249
  1696. package/deps/re2/re2.pc.in +0 -9
  1697. package/deps/re2/re2Config.cmake.in +0 -26
  1698. package/deps/re2/runtests +0 -33
  1699. package/deps/re2/testinstall.cc +0 -27
  1700. package/deps/re2/ucs2.diff +0 -567
  1701. package/deps/re2/util/malloc_counter.h +0 -19
  1702. package/deps/re2/util/pcre.cc +0 -957
  1703. package/deps/re2/util/pcre.h +0 -671
  1704. package/deps/re2/util/rune.cc +0 -260
  1705. package/deps/re2/util/strutil.cc +0 -26
  1706. package/deps/re2/util/strutil.h +0 -16
  1707. package/deps/re2/util/utf.h +0 -44
@@ -1,2820 +0,0 @@
1
- // Copyright 2017 The Abseil Authors.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // https://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- #include "absl/synchronization/mutex.h"
16
-
17
- #ifdef _WIN32
18
- #include <windows.h>
19
- #ifdef ERROR
20
- #undef ERROR
21
- #endif
22
- #else
23
- #include <fcntl.h>
24
- #include <pthread.h>
25
- #include <sched.h>
26
- #include <sys/time.h>
27
- #endif
28
-
29
- #include <assert.h>
30
- #include <errno.h>
31
- #include <stdio.h>
32
- #include <stdlib.h>
33
- #include <string.h>
34
- #include <time.h>
35
-
36
- #include <algorithm>
37
- #include <atomic>
38
- #include <cstddef>
39
- #include <cstdlib>
40
- #include <cstring>
41
- #include <thread> // NOLINT(build/c++11)
42
-
43
- #include "absl/base/attributes.h"
44
- #include "absl/base/call_once.h"
45
- #include "absl/base/config.h"
46
- #include "absl/base/dynamic_annotations.h"
47
- #include "absl/base/internal/atomic_hook.h"
48
- #include "absl/base/internal/cycleclock.h"
49
- #include "absl/base/internal/hide_ptr.h"
50
- #include "absl/base/internal/low_level_alloc.h"
51
- #include "absl/base/internal/raw_logging.h"
52
- #include "absl/base/internal/spinlock.h"
53
- #include "absl/base/internal/sysinfo.h"
54
- #include "absl/base/internal/thread_identity.h"
55
- #include "absl/base/internal/tsan_mutex_interface.h"
56
- #include "absl/base/optimization.h"
57
- #include "absl/debugging/stacktrace.h"
58
- #include "absl/debugging/symbolize.h"
59
- #include "absl/synchronization/internal/graphcycles.h"
60
- #include "absl/synchronization/internal/per_thread_sem.h"
61
- #include "absl/time/time.h"
62
-
63
- using absl::base_internal::CurrentThreadIdentityIfPresent;
64
- using absl::base_internal::CycleClock;
65
- using absl::base_internal::PerThreadSynch;
66
- using absl::base_internal::SchedulingGuard;
67
- using absl::base_internal::ThreadIdentity;
68
- using absl::synchronization_internal::GetOrCreateCurrentThreadIdentity;
69
- using absl::synchronization_internal::GraphCycles;
70
- using absl::synchronization_internal::GraphId;
71
- using absl::synchronization_internal::InvalidGraphId;
72
- using absl::synchronization_internal::KernelTimeout;
73
- using absl::synchronization_internal::PerThreadSem;
74
-
75
- extern "C" {
76
- ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalMutexYield)() {
77
- std::this_thread::yield();
78
- }
79
- } // extern "C"
80
-
81
- namespace absl {
82
- ABSL_NAMESPACE_BEGIN
83
-
84
- namespace {
85
-
86
- #if defined(ABSL_HAVE_THREAD_SANITIZER)
87
- constexpr OnDeadlockCycle kDeadlockDetectionDefault = OnDeadlockCycle::kIgnore;
88
- #else
89
- constexpr OnDeadlockCycle kDeadlockDetectionDefault = OnDeadlockCycle::kAbort;
90
- #endif
91
-
92
- ABSL_CONST_INIT std::atomic<OnDeadlockCycle> synch_deadlock_detection(
93
- kDeadlockDetectionDefault);
94
- ABSL_CONST_INIT std::atomic<bool> synch_check_invariants(false);
95
-
96
- ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
97
- absl::base_internal::AtomicHook<void (*)(int64_t wait_cycles)>
98
- submit_profile_data;
99
- ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES absl::base_internal::AtomicHook<void (*)(
100
- const char* msg, const void* obj, int64_t wait_cycles)>
101
- mutex_tracer;
102
- ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
103
- absl::base_internal::AtomicHook<void (*)(const char* msg, const void* cv)>
104
- cond_var_tracer;
105
-
106
- } // namespace
107
-
108
- static inline bool EvalConditionAnnotated(const Condition* cond, Mutex* mu,
109
- bool locking, bool trylock,
110
- bool read_lock);
111
-
112
- void RegisterMutexProfiler(void (*fn)(int64_t wait_cycles)) {
113
- submit_profile_data.Store(fn);
114
- }
115
-
116
- void RegisterMutexTracer(void (*fn)(const char* msg, const void* obj,
117
- int64_t wait_cycles)) {
118
- mutex_tracer.Store(fn);
119
- }
120
-
121
- void RegisterCondVarTracer(void (*fn)(const char* msg, const void* cv)) {
122
- cond_var_tracer.Store(fn);
123
- }
124
-
125
- namespace {
126
- // Represents the strategy for spin and yield.
127
- // See the comment in GetMutexGlobals() for more information.
128
- enum DelayMode { AGGRESSIVE, GENTLE };
129
-
130
- struct ABSL_CACHELINE_ALIGNED MutexGlobals {
131
- absl::once_flag once;
132
- // Note: this variable is initialized separately in Mutex::LockSlow,
133
- // so that Mutex::Lock does not have a stack frame in optimized build.
134
- std::atomic<int> spinloop_iterations{0};
135
- int32_t mutex_sleep_spins[2] = {};
136
- absl::Duration mutex_sleep_time;
137
- };
138
-
139
- ABSL_CONST_INIT static MutexGlobals globals;
140
-
141
- absl::Duration MeasureTimeToYield() {
142
- absl::Time before = absl::Now();
143
- ABSL_INTERNAL_C_SYMBOL(AbslInternalMutexYield)();
144
- return absl::Now() - before;
145
- }
146
-
147
- const MutexGlobals& GetMutexGlobals() {
148
- absl::base_internal::LowLevelCallOnce(&globals.once, [&]() {
149
- if (absl::base_internal::NumCPUs() > 1) {
150
- // If the mode is aggressive then spin many times before yielding.
151
- // If the mode is gentle then spin only a few times before yielding.
152
- // Aggressive spinning is used to ensure that an Unlock() call,
153
- // which must get the spin lock for any thread to make progress gets it
154
- // without undue delay.
155
- globals.mutex_sleep_spins[AGGRESSIVE] = 5000;
156
- globals.mutex_sleep_spins[GENTLE] = 250;
157
- globals.mutex_sleep_time = absl::Microseconds(10);
158
- } else {
159
- // If this a uniprocessor, only yield/sleep. Real-time threads are often
160
- // unable to yield, so the sleep time needs to be long enough to keep
161
- // the calling thread asleep until scheduling happens.
162
- globals.mutex_sleep_spins[AGGRESSIVE] = 0;
163
- globals.mutex_sleep_spins[GENTLE] = 0;
164
- globals.mutex_sleep_time = MeasureTimeToYield() * 5;
165
- globals.mutex_sleep_time =
166
- std::min(globals.mutex_sleep_time, absl::Milliseconds(1));
167
- globals.mutex_sleep_time =
168
- std::max(globals.mutex_sleep_time, absl::Microseconds(10));
169
- }
170
- });
171
- return globals;
172
- }
173
- } // namespace
174
-
175
- namespace synchronization_internal {
176
- // Returns the Mutex delay on iteration `c` depending on the given `mode`.
177
- // The returned value should be used as `c` for the next call to `MutexDelay`.
178
- int MutexDelay(int32_t c, int mode) {
179
- const int32_t limit = GetMutexGlobals().mutex_sleep_spins[mode];
180
- const absl::Duration sleep_time = GetMutexGlobals().mutex_sleep_time;
181
- if (c < limit) {
182
- // Spin.
183
- c++;
184
- } else {
185
- SchedulingGuard::ScopedEnable enable_rescheduling;
186
- ABSL_TSAN_MUTEX_PRE_DIVERT(nullptr, 0);
187
- if (c == limit) {
188
- // Yield once.
189
- ABSL_INTERNAL_C_SYMBOL(AbslInternalMutexYield)();
190
- c++;
191
- } else {
192
- // Then wait.
193
- absl::SleepFor(sleep_time);
194
- c = 0;
195
- }
196
- ABSL_TSAN_MUTEX_POST_DIVERT(nullptr, 0);
197
- }
198
- return c;
199
- }
200
- } // namespace synchronization_internal
201
-
202
- // --------------------------Generic atomic ops
203
- // Ensure that "(*pv & bits) == bits" by doing an atomic update of "*pv" to
204
- // "*pv | bits" if necessary. Wait until (*pv & wait_until_clear)==0
205
- // before making any change.
206
- // Returns true if bits were previously unset and set by the call.
207
- // This is used to set flags in mutex and condition variable words.
208
- static bool AtomicSetBits(std::atomic<intptr_t>* pv, intptr_t bits,
209
- intptr_t wait_until_clear) {
210
- for (;;) {
211
- intptr_t v = pv->load(std::memory_order_relaxed);
212
- if ((v & bits) == bits) {
213
- return false;
214
- }
215
- if ((v & wait_until_clear) != 0) {
216
- continue;
217
- }
218
- if (pv->compare_exchange_weak(v, v | bits, std::memory_order_release,
219
- std::memory_order_relaxed)) {
220
- return true;
221
- }
222
- }
223
- }
224
-
225
- //------------------------------------------------------------------
226
-
227
- // Data for doing deadlock detection.
228
- ABSL_CONST_INIT static absl::base_internal::SpinLock deadlock_graph_mu(
229
- base_internal::SCHEDULE_KERNEL_ONLY);
230
-
231
- // Graph used to detect deadlocks.
232
- ABSL_CONST_INIT static GraphCycles* deadlock_graph
233
- ABSL_GUARDED_BY(deadlock_graph_mu) ABSL_PT_GUARDED_BY(deadlock_graph_mu);
234
-
235
- //------------------------------------------------------------------
236
- // An event mechanism for debugging mutex use.
237
- // It also allows mutexes to be given names for those who can't handle
238
- // addresses, and instead like to give their data structures names like
239
- // "Henry", "Fido", or "Rupert IV, King of Yondavia".
240
-
241
- namespace { // to prevent name pollution
242
- enum { // Mutex and CondVar events passed as "ev" to PostSynchEvent
243
- // Mutex events
244
- SYNCH_EV_TRYLOCK_SUCCESS,
245
- SYNCH_EV_TRYLOCK_FAILED,
246
- SYNCH_EV_READERTRYLOCK_SUCCESS,
247
- SYNCH_EV_READERTRYLOCK_FAILED,
248
- SYNCH_EV_LOCK,
249
- SYNCH_EV_LOCK_RETURNING,
250
- SYNCH_EV_READERLOCK,
251
- SYNCH_EV_READERLOCK_RETURNING,
252
- SYNCH_EV_UNLOCK,
253
- SYNCH_EV_READERUNLOCK,
254
-
255
- // CondVar events
256
- SYNCH_EV_WAIT,
257
- SYNCH_EV_WAIT_RETURNING,
258
- SYNCH_EV_SIGNAL,
259
- SYNCH_EV_SIGNALALL,
260
- };
261
-
262
- enum { // Event flags
263
- SYNCH_F_R = 0x01, // reader event
264
- SYNCH_F_LCK = 0x02, // PostSynchEvent called with mutex held
265
- SYNCH_F_TRY = 0x04, // TryLock or ReaderTryLock
266
- SYNCH_F_UNLOCK = 0x08, // Unlock or ReaderUnlock
267
-
268
- SYNCH_F_LCK_W = SYNCH_F_LCK,
269
- SYNCH_F_LCK_R = SYNCH_F_LCK | SYNCH_F_R,
270
- };
271
- } // anonymous namespace
272
-
273
- // Properties of the events.
274
- static const struct {
275
- int flags;
276
- const char* msg;
277
- } event_properties[] = {
278
- {SYNCH_F_LCK_W | SYNCH_F_TRY, "TryLock succeeded "},
279
- {0, "TryLock failed "},
280
- {SYNCH_F_LCK_R | SYNCH_F_TRY, "ReaderTryLock succeeded "},
281
- {0, "ReaderTryLock failed "},
282
- {0, "Lock blocking "},
283
- {SYNCH_F_LCK_W, "Lock returning "},
284
- {0, "ReaderLock blocking "},
285
- {SYNCH_F_LCK_R, "ReaderLock returning "},
286
- {SYNCH_F_LCK_W | SYNCH_F_UNLOCK, "Unlock "},
287
- {SYNCH_F_LCK_R | SYNCH_F_UNLOCK, "ReaderUnlock "},
288
- {0, "Wait on "},
289
- {0, "Wait unblocked "},
290
- {0, "Signal on "},
291
- {0, "SignalAll on "},
292
- };
293
-
294
- ABSL_CONST_INIT static absl::base_internal::SpinLock synch_event_mu(
295
- base_internal::SCHEDULE_KERNEL_ONLY);
296
-
297
- // Hash table size; should be prime > 2.
298
- // Can't be too small, as it's used for deadlock detection information.
299
- static constexpr uint32_t kNSynchEvent = 1031;
300
-
301
- static struct SynchEvent { // this is a trivial hash table for the events
302
- // struct is freed when refcount reaches 0
303
- int refcount ABSL_GUARDED_BY(synch_event_mu);
304
-
305
- // buckets have linear, 0-terminated chains
306
- SynchEvent* next ABSL_GUARDED_BY(synch_event_mu);
307
-
308
- // Constant after initialization
309
- uintptr_t masked_addr; // object at this address is called "name"
310
-
311
- // No explicit synchronization used. Instead we assume that the
312
- // client who enables/disables invariants/logging on a Mutex does so
313
- // while the Mutex is not being concurrently accessed by others.
314
- void (*invariant)(void* arg); // called on each event
315
- void* arg; // first arg to (*invariant)()
316
- bool log; // logging turned on
317
-
318
- // Constant after initialization
319
- char name[1]; // actually longer---NUL-terminated string
320
- }* synch_event[kNSynchEvent] ABSL_GUARDED_BY(synch_event_mu);
321
-
322
- // Ensure that the object at "addr" has a SynchEvent struct associated with it,
323
- // set "bits" in the word there (waiting until lockbit is clear before doing
324
- // so), and return a refcounted reference that will remain valid until
325
- // UnrefSynchEvent() is called. If a new SynchEvent is allocated,
326
- // the string name is copied into it.
327
- // When used with a mutex, the caller should also ensure that kMuEvent
328
- // is set in the mutex word, and similarly for condition variables and kCVEvent.
329
- static SynchEvent* EnsureSynchEvent(std::atomic<intptr_t>* addr,
330
- const char* name, intptr_t bits,
331
- intptr_t lockbit) {
332
- uint32_t h = reinterpret_cast<uintptr_t>(addr) % kNSynchEvent;
333
- synch_event_mu.lock();
334
- // When a Mutex/CondVar is destroyed, we don't remove the associated
335
- // SynchEvent to keep destructors empty in release builds for performance
336
- // reasons. If the current call is the first to set bits (kMuEvent/kCVEvent),
337
- // we don't look up the existing even because (if it exists, it must be for
338
- // the previous Mutex/CondVar that existed at the same address).
339
- // The leaking events must not be a problem for tests, which should create
340
- // bounded amount of events. And debug logging is not supposed to be enabled
341
- // in production. However, if it's accidentally enabled, or briefly enabled
342
- // for some debugging, we don't want to crash the program. Instead we drop
343
- // all events, if we accumulated too many of them. Size of a single event
344
- // is ~48 bytes, so 100K events is ~5 MB.
345
- // Additionally we could delete the old event for the same address,
346
- // but it would require a better hashmap (if we accumulate too many events,
347
- // linked lists will grow and traversing them will be very slow).
348
- constexpr size_t kMaxSynchEventCount = 100 << 10;
349
- // Total number of live synch events.
350
- static size_t synch_event_count ABSL_GUARDED_BY(synch_event_mu);
351
- if (++synch_event_count > kMaxSynchEventCount) {
352
- synch_event_count = 0;
353
- ABSL_RAW_LOG(ERROR,
354
- "Accumulated %zu Mutex debug objects. If you see this"
355
- " in production, it may mean that the production code"
356
- " accidentally calls "
357
- "Mutex/CondVar::EnableDebugLog/EnableInvariantDebugging.",
358
- kMaxSynchEventCount);
359
- for (auto*& head : synch_event) {
360
- for (auto* e = head; e != nullptr;) {
361
- SynchEvent* next = e->next;
362
- if (--(e->refcount) == 0) {
363
- base_internal::LowLevelAlloc::Free(e);
364
- }
365
- e = next;
366
- }
367
- head = nullptr;
368
- }
369
- }
370
- SynchEvent* e = nullptr;
371
- if (!AtomicSetBits(addr, bits, lockbit)) {
372
- for (e = synch_event[h];
373
- e != nullptr && e->masked_addr != base_internal::HidePtr(addr);
374
- e = e->next) {
375
- }
376
- }
377
- if (e == nullptr) { // no SynchEvent struct found; make one.
378
- if (name == nullptr) {
379
- name = "";
380
- }
381
- size_t l = strlen(name);
382
- e = reinterpret_cast<SynchEvent*>(
383
- base_internal::LowLevelAlloc::Alloc(sizeof(*e) + l));
384
- e->refcount = 2; // one for return value, one for linked list
385
- e->masked_addr = base_internal::HidePtr(addr);
386
- e->invariant = nullptr;
387
- e->arg = nullptr;
388
- e->log = false;
389
- strcpy(e->name, name); // NOLINT(runtime/printf)
390
- e->next = synch_event[h];
391
- synch_event[h] = e;
392
- } else {
393
- e->refcount++; // for return value
394
- }
395
- synch_event_mu.unlock();
396
- return e;
397
- }
398
-
399
- // Decrement the reference count of *e, or do nothing if e==null.
400
- static void UnrefSynchEvent(SynchEvent* e) {
401
- if (e != nullptr) {
402
- synch_event_mu.lock();
403
- bool del = (--(e->refcount) == 0);
404
- synch_event_mu.unlock();
405
- if (del) {
406
- base_internal::LowLevelAlloc::Free(e);
407
- }
408
- }
409
- }
410
-
411
- // Return a refcounted reference to the SynchEvent of the object at address
412
- // "addr", if any. The pointer returned is valid until the UnrefSynchEvent() is
413
- // called.
414
- static SynchEvent* GetSynchEvent(const void* addr) {
415
- uint32_t h = reinterpret_cast<uintptr_t>(addr) % kNSynchEvent;
416
- SynchEvent* e;
417
- synch_event_mu.lock();
418
- for (e = synch_event[h];
419
- e != nullptr && e->masked_addr != base_internal::HidePtr(addr);
420
- e = e->next) {
421
- }
422
- if (e != nullptr) {
423
- e->refcount++;
424
- }
425
- synch_event_mu.unlock();
426
- return e;
427
- }
428
-
429
- // Called when an event "ev" occurs on a Mutex of CondVar "obj"
430
- // if event recording is on
431
- static void PostSynchEvent(void* obj, int ev) {
432
- SynchEvent* e = GetSynchEvent(obj);
433
- // logging is on if event recording is on and either there's no event struct,
434
- // or it explicitly says to log
435
- if (e == nullptr || e->log) {
436
- void* pcs[40];
437
- int n = absl::GetStackTrace(pcs, ABSL_ARRAYSIZE(pcs), 1);
438
- // A buffer with enough space for the ASCII for all the PCs, even on a
439
- // 64-bit machine.
440
- char buffer[ABSL_ARRAYSIZE(pcs) * 24];
441
- int pos = snprintf(buffer, sizeof(buffer), " @");
442
- for (int i = 0; i != n; i++) {
443
- int b = snprintf(&buffer[pos], sizeof(buffer) - static_cast<size_t>(pos),
444
- " %p", pcs[i]);
445
- if (b < 0 ||
446
- static_cast<size_t>(b) >= sizeof(buffer) - static_cast<size_t>(pos)) {
447
- break;
448
- }
449
- pos += b;
450
- }
451
- ABSL_RAW_LOG(INFO, "%s%p %s %s", event_properties[ev].msg, obj,
452
- (e == nullptr ? "" : e->name), buffer);
453
- }
454
- const int flags = event_properties[ev].flags;
455
- if ((flags & SYNCH_F_LCK) != 0 && e != nullptr && e->invariant != nullptr) {
456
- // Calling the invariant as is causes problems under ThreadSanitizer.
457
- // We are currently inside of Mutex Lock/Unlock and are ignoring all
458
- // memory accesses and synchronization. If the invariant transitively
459
- // synchronizes something else and we ignore the synchronization, we will
460
- // get false positive race reports later.
461
- // Reuse EvalConditionAnnotated to properly call into user code.
462
- struct local {
463
- static bool pred(SynchEvent* ev) {
464
- (*ev->invariant)(ev->arg);
465
- return false;
466
- }
467
- };
468
- Condition cond(&local::pred, e);
469
- Mutex* mu = static_cast<Mutex*>(obj);
470
- const bool locking = (flags & SYNCH_F_UNLOCK) == 0;
471
- const bool trylock = (flags & SYNCH_F_TRY) != 0;
472
- const bool read_lock = (flags & SYNCH_F_R) != 0;
473
- EvalConditionAnnotated(&cond, mu, locking, trylock, read_lock);
474
- }
475
- UnrefSynchEvent(e);
476
- }
477
-
478
- //------------------------------------------------------------------
479
-
480
- // The SynchWaitParams struct encapsulates the way in which a thread is waiting:
481
- // whether it has a timeout, the condition, exclusive/shared, and whether a
482
- // condition variable wait has an associated Mutex (as opposed to another
483
- // type of lock). It also points to the PerThreadSynch struct of its thread.
484
- // cv_word tells Enqueue() to enqueue on a CondVar using CondVarEnqueue().
485
- //
486
- // This structure is held on the stack rather than directly in
487
- // PerThreadSynch because a thread can be waiting on multiple Mutexes if,
488
- // while waiting on one Mutex, the implementation calls a client callback
489
- // (such as a Condition function) that acquires another Mutex. We don't
490
- // strictly need to allow this, but programmers become confused if we do not
491
- // allow them to use functions such a LOG() within Condition functions. The
492
- // PerThreadSynch struct points at the most recent SynchWaitParams struct when
493
- // the thread is on a Mutex's waiter queue.
494
- struct SynchWaitParams {
495
- SynchWaitParams(Mutex::MuHow how_arg, const Condition* cond_arg,
496
- KernelTimeout timeout_arg, Mutex* cvmu_arg,
497
- PerThreadSynch* thread_arg,
498
- std::atomic<intptr_t>* cv_word_arg)
499
- : how(how_arg),
500
- cond(cond_arg),
501
- timeout(timeout_arg),
502
- cvmu(cvmu_arg),
503
- thread(thread_arg),
504
- cv_word(cv_word_arg),
505
- contention_start_cycles(CycleClock::Now()),
506
- should_submit_contention_data(false) {}
507
-
508
- const Mutex::MuHow how; // How this thread needs to wait.
509
- const Condition* cond; // The condition that this thread is waiting for.
510
- // In Mutex, this field is set to zero if a timeout
511
- // expires.
512
- KernelTimeout timeout; // timeout expiry---absolute time
513
- // In Mutex, this field is set to zero if a timeout
514
- // expires.
515
- Mutex* const cvmu; // used for transfer from cond var to mutex
516
- PerThreadSynch* const thread; // thread that is waiting
517
-
518
- // If not null, thread should be enqueued on the CondVar whose state
519
- // word is cv_word instead of queueing normally on the Mutex.
520
- std::atomic<intptr_t>* cv_word;
521
-
522
- int64_t contention_start_cycles; // Time (in cycles) when this thread started
523
- // to contend for the mutex.
524
- bool should_submit_contention_data;
525
- };
526
-
527
- struct SynchLocksHeld {
528
- int n; // number of valid entries in locks[]
529
- bool overflow; // true iff we overflowed the array at some point
530
- struct {
531
- Mutex* mu; // lock acquired
532
- int32_t count; // times acquired
533
- GraphId id; // deadlock_graph id of acquired lock
534
- } locks[40];
535
- // If a thread overfills the array during deadlock detection, we
536
- // continue, discarding information as needed. If no overflow has
537
- // taken place, we can provide more error checking, such as
538
- // detecting when a thread releases a lock it does not hold.
539
- };
540
-
541
- // A sentinel value in lists that is not 0.
542
- // A 0 value is used to mean "not on a list".
543
- static PerThreadSynch* const kPerThreadSynchNull =
544
- reinterpret_cast<PerThreadSynch*>(1);
545
-
546
- static SynchLocksHeld* LocksHeldAlloc() {
547
- SynchLocksHeld* ret = reinterpret_cast<SynchLocksHeld*>(
548
- base_internal::LowLevelAlloc::Alloc(sizeof(SynchLocksHeld)));
549
- ret->n = 0;
550
- ret->overflow = false;
551
- return ret;
552
- }
553
-
554
- // Return the PerThreadSynch-struct for this thread.
555
- static PerThreadSynch* Synch_GetPerThread() {
556
- ThreadIdentity* identity = GetOrCreateCurrentThreadIdentity();
557
- return &identity->per_thread_synch;
558
- }
559
-
560
- static PerThreadSynch* Synch_GetPerThreadAnnotated(Mutex* mu) {
561
- if (mu) {
562
- ABSL_TSAN_MUTEX_PRE_DIVERT(mu, 0);
563
- }
564
- PerThreadSynch* w = Synch_GetPerThread();
565
- if (mu) {
566
- ABSL_TSAN_MUTEX_POST_DIVERT(mu, 0);
567
- }
568
- return w;
569
- }
570
-
571
- static SynchLocksHeld* Synch_GetAllLocks() {
572
- PerThreadSynch* s = Synch_GetPerThread();
573
- if (s->all_locks == nullptr) {
574
- s->all_locks = LocksHeldAlloc(); // Freed by ReclaimThreadIdentity.
575
- }
576
- return s->all_locks;
577
- }
578
-
579
- // Post on "w"'s associated PerThreadSem.
580
- void Mutex::IncrementSynchSem(Mutex* mu, PerThreadSynch* w) {
581
- static_cast<void>(mu); // Prevent unused param warning in non-TSAN builds.
582
- ABSL_TSAN_MUTEX_PRE_DIVERT(mu, 0);
583
- // We miss synchronization around passing PerThreadSynch between threads
584
- // since it happens inside of the Mutex code, so we need to ignore all
585
- // accesses to the object.
586
- ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN();
587
- PerThreadSem::Post(w->thread_identity());
588
- ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END();
589
- ABSL_TSAN_MUTEX_POST_DIVERT(mu, 0);
590
- }
591
-
592
- // Wait on "w"'s associated PerThreadSem; returns false if timeout expired.
593
- bool Mutex::DecrementSynchSem(Mutex* mu, PerThreadSynch* w, KernelTimeout t) {
594
- static_cast<void>(mu); // Prevent unused param warning in non-TSAN builds.
595
- ABSL_TSAN_MUTEX_PRE_DIVERT(mu, 0);
596
- assert(w == Synch_GetPerThread());
597
- static_cast<void>(w);
598
- bool res = PerThreadSem::Wait(t);
599
- ABSL_TSAN_MUTEX_POST_DIVERT(mu, 0);
600
- return res;
601
- }
602
-
603
- // We're in a fatal signal handler that hopes to use Mutex and to get
604
- // lucky by not deadlocking. We try to improve its chances of success
605
- // by effectively disabling some of the consistency checks. This will
606
- // prevent certain ABSL_RAW_CHECK() statements from being triggered when
607
- // re-rentry is detected. The ABSL_RAW_CHECK() statements are those in the
608
- // Mutex code checking that the "waitp" field has not been reused.
609
- void Mutex::InternalAttemptToUseMutexInFatalSignalHandler() {
610
- // Fix the per-thread state only if it exists.
611
- ThreadIdentity* identity = CurrentThreadIdentityIfPresent();
612
- if (identity != nullptr) {
613
- identity->per_thread_synch.suppress_fatal_errors = true;
614
- }
615
- // Don't do deadlock detection when we are already failing.
616
- synch_deadlock_detection.store(OnDeadlockCycle::kIgnore,
617
- std::memory_order_release);
618
- }
619
-
620
- // --------------------------Mutexes
621
-
622
- // In the layout below, the msb of the bottom byte is currently unused. Also,
623
- // the following constraints were considered in choosing the layout:
624
- // o Both the debug allocator's "uninitialized" and "freed" patterns (0xab and
625
- // 0xcd) are illegal: reader and writer lock both held.
626
- // o kMuWriter and kMuEvent should exceed kMuDesig and kMuWait, to enable the
627
- // bit-twiddling trick in Mutex::Unlock().
628
- // o kMuWriter / kMuReader == kMuWrWait / kMuWait,
629
- // to enable the bit-twiddling trick in CheckForMutexCorruption().
630
- static const intptr_t kMuReader = 0x0001L; // a reader holds the lock
631
- // There's a designated waker.
632
- // INVARIANT1: there's a thread that was blocked on the mutex, is
633
- // no longer, yet has not yet acquired the mutex. If there's a
634
- // designated waker, all threads can avoid taking the slow path in
635
- // unlock because the designated waker will subsequently acquire
636
- // the lock and wake someone. To maintain INVARIANT1 the bit is
637
- // set when a thread is unblocked(INV1a), and threads that were
638
- // unblocked reset the bit when they either acquire or re-block (INV1b).
639
- static const intptr_t kMuDesig = 0x0002L;
640
- static const intptr_t kMuWait = 0x0004L; // threads are waiting
641
- static const intptr_t kMuWriter = 0x0008L; // a writer holds the lock
642
- static const intptr_t kMuEvent = 0x0010L; // record this mutex's events
643
- // Runnable writer is waiting for a reader.
644
- // If set, new readers will not lock the mutex to avoid writer starvation.
645
- // Note: if a reader has higher priority than the writer, it will still lock
646
- // the mutex ahead of the waiting writer, but in a very inefficient manner:
647
- // the reader will first queue itself and block, but then the last unlocking
648
- // reader will wake it.
649
- static const intptr_t kMuWrWait = 0x0020L;
650
- static const intptr_t kMuSpin = 0x0040L; // spinlock protects wait list
651
- static const intptr_t kMuLow = 0x00ffL; // mask all mutex bits
652
- static const intptr_t kMuHigh = ~kMuLow; // mask pointer/reader count
653
-
654
- static_assert((0xab & (kMuWriter | kMuReader)) == (kMuWriter | kMuReader),
655
- "The debug allocator's uninitialized pattern (0xab) must be an "
656
- "invalid mutex state");
657
- static_assert((0xcd & (kMuWriter | kMuReader)) == (kMuWriter | kMuReader),
658
- "The debug allocator's freed pattern (0xcd) must be an invalid "
659
- "mutex state");
660
-
661
- // Hack to make constant values available to gdb pretty printer
662
- enum {
663
- kGdbMuSpin = kMuSpin,
664
- kGdbMuEvent = kMuEvent,
665
- kGdbMuWait = kMuWait,
666
- kGdbMuWriter = kMuWriter,
667
- kGdbMuDesig = kMuDesig,
668
- kGdbMuWrWait = kMuWrWait,
669
- kGdbMuReader = kMuReader,
670
- kGdbMuLow = kMuLow,
671
- };
672
-
673
- // kMuWrWait implies kMuWait.
674
- // kMuReader and kMuWriter are mutually exclusive.
675
- // If kMuReader is zero, there are no readers.
676
- // Otherwise, if kMuWait is zero, the high order bits contain a count of the
677
- // number of readers. Otherwise, the reader count is held in
678
- // PerThreadSynch::readers of the most recently queued waiter, again in the
679
- // bits above kMuLow.
680
- static const intptr_t kMuOne = 0x0100; // a count of one reader
681
-
682
- // flags passed to Enqueue and LockSlow{,WithTimeout,Loop}
683
- static const int kMuHasBlocked = 0x01; // already blocked (MUST == 1)
684
- static const int kMuIsCond = 0x02; // conditional waiter (CV or Condition)
685
- static const int kMuIsFer = 0x04; // wait morphing from a CondVar
686
-
687
- static_assert(PerThreadSynch::kAlignment > kMuLow,
688
- "PerThreadSynch::kAlignment must be greater than kMuLow");
689
-
690
- // This struct contains various bitmasks to be used in
691
- // acquiring and releasing a mutex in a particular mode.
692
- struct MuHowS {
693
- // if all the bits in fast_need_zero are zero, the lock can be acquired by
694
- // adding fast_add and oring fast_or. The bit kMuDesig should be reset iff
695
- // this is the designated waker.
696
- intptr_t fast_need_zero;
697
- intptr_t fast_or;
698
- intptr_t fast_add;
699
-
700
- intptr_t slow_need_zero; // fast_need_zero with events (e.g. logging)
701
-
702
- intptr_t slow_inc_need_zero; // if all the bits in slow_inc_need_zero are
703
- // zero a reader can acquire a read share by
704
- // setting the reader bit and incrementing
705
- // the reader count (in last waiter since
706
- // we're now slow-path). kMuWrWait be may
707
- // be ignored if we already waited once.
708
- };
709
-
710
- static const MuHowS kSharedS = {
711
- // shared or read lock
712
- kMuWriter | kMuWait | kMuEvent, // fast_need_zero
713
- kMuReader, // fast_or
714
- kMuOne, // fast_add
715
- kMuWriter | kMuWait, // slow_need_zero
716
- kMuSpin | kMuWriter | kMuWrWait, // slow_inc_need_zero
717
- };
718
- static const MuHowS kExclusiveS = {
719
- // exclusive or write lock
720
- kMuWriter | kMuReader | kMuEvent, // fast_need_zero
721
- kMuWriter, // fast_or
722
- 0, // fast_add
723
- kMuWriter | kMuReader, // slow_need_zero
724
- ~static_cast<intptr_t>(0), // slow_inc_need_zero
725
- };
726
- static const Mutex::MuHow kShared = &kSharedS; // shared lock
727
- static const Mutex::MuHow kExclusive = &kExclusiveS; // exclusive lock
728
-
729
- #ifdef NDEBUG
730
- static constexpr bool kDebugMode = false;
731
- #else
732
- static constexpr bool kDebugMode = true;
733
- #endif
734
-
735
- #ifdef ABSL_INTERNAL_HAVE_TSAN_INTERFACE
736
- static unsigned TsanFlags(Mutex::MuHow how) {
737
- return how == kShared ? __tsan_mutex_read_lock : 0;
738
- }
739
- #endif
740
-
741
- #if defined(__APPLE__) || defined(ABSL_BUILD_DLL)
742
- // When building a dll symbol export lists may reference the destructor
743
- // and want it to be an exported symbol rather than an inline function.
744
- // Some apple builds also do dynamic library build but don't say it explicitly.
745
- Mutex::~Mutex() { Dtor(); }
746
- #endif
747
-
748
- #if !defined(NDEBUG) || defined(ABSL_HAVE_THREAD_SANITIZER) || \
749
- defined(ABSL_BUILD_DLL)
750
- void Mutex::Dtor() {
751
- if (kDebugMode) {
752
- this->ForgetDeadlockInfo();
753
- }
754
- ABSL_TSAN_MUTEX_DESTROY(this, __tsan_mutex_not_static);
755
- }
756
- #endif
757
-
758
- void Mutex::EnableDebugLog(const char* name) {
759
- // Need to disable writes here and in EnableInvariantDebugging to prevent
760
- // false race reports on SynchEvent objects. TSan ignores synchronization
761
- // on synch_event_mu in Lock/Unlock/etc methods due to mutex annotations,
762
- // but it sees few accesses to SynchEvent in EvalConditionAnnotated.
763
- // If we don't ignore accesses here, it can result in false races
764
- // between EvalConditionAnnotated and SynchEvent reuse in EnsureSynchEvent.
765
- ABSL_ANNOTATE_IGNORE_WRITES_BEGIN();
766
- SynchEvent* e = EnsureSynchEvent(&this->mu_, name, kMuEvent, kMuSpin);
767
- e->log = true;
768
- UnrefSynchEvent(e);
769
- // This prevents "error: undefined symbol: absl::Mutex::~Mutex()"
770
- // in a release build (NDEBUG defined) when a test does "#undef NDEBUG"
771
- // to use assert macro. In such case, the test does not get the dtor
772
- // definition because it's supposed to be outline when NDEBUG is not defined,
773
- // and this source file does not define one either because NDEBUG is defined.
774
- // Since it's not possible to take address of a destructor, we move the
775
- // actual destructor code into the separate Dtor function and force the
776
- // compiler to emit this function even if it's inline by taking its address.
777
- ABSL_ATTRIBUTE_UNUSED volatile auto dtor = &Mutex::Dtor;
778
- ABSL_ANNOTATE_IGNORE_WRITES_END();
779
- }
780
-
781
- void EnableMutexInvariantDebugging(bool enabled) {
782
- synch_check_invariants.store(enabled, std::memory_order_release);
783
- }
784
-
785
- void Mutex::EnableInvariantDebugging(void (*invariant)(void*), void* arg) {
786
- ABSL_ANNOTATE_IGNORE_WRITES_BEGIN();
787
- if (synch_check_invariants.load(std::memory_order_acquire) &&
788
- invariant != nullptr) {
789
- SynchEvent* e = EnsureSynchEvent(&this->mu_, nullptr, kMuEvent, kMuSpin);
790
- e->invariant = invariant;
791
- e->arg = arg;
792
- UnrefSynchEvent(e);
793
- }
794
- ABSL_ANNOTATE_IGNORE_WRITES_END();
795
- }
796
-
797
- void SetMutexDeadlockDetectionMode(OnDeadlockCycle mode) {
798
- synch_deadlock_detection.store(mode, std::memory_order_release);
799
- }
800
-
801
- // Return true iff threads x and y are part of the same equivalence
802
- // class of waiters. An equivalence class is defined as the set of
803
- // waiters with the same condition, type of lock, and thread priority.
804
- //
805
- // Requires that x and y be waiting on the same Mutex queue.
806
- static bool MuEquivalentWaiter(PerThreadSynch* x, PerThreadSynch* y) {
807
- return x->waitp->how == y->waitp->how && x->priority == y->priority &&
808
- Condition::GuaranteedEqual(x->waitp->cond, y->waitp->cond);
809
- }
810
-
811
- // Given the contents of a mutex word containing a PerThreadSynch pointer,
812
- // return the pointer.
813
- static inline PerThreadSynch* GetPerThreadSynch(intptr_t v) {
814
- return reinterpret_cast<PerThreadSynch*>(v & kMuHigh);
815
- }
816
-
817
- // The next several routines maintain the per-thread next and skip fields
818
- // used in the Mutex waiter queue.
819
- // The queue is a circular singly-linked list, of which the "head" is the
820
- // last element, and head->next if the first element.
821
- // The skip field has the invariant:
822
- // For thread x, x->skip is one of:
823
- // - invalid (iff x is not in a Mutex wait queue),
824
- // - null, or
825
- // - a pointer to a distinct thread waiting later in the same Mutex queue
826
- // such that all threads in [x, x->skip] have the same condition, priority
827
- // and lock type (MuEquivalentWaiter() is true for all pairs in [x,
828
- // x->skip]).
829
- // In addition, if x->skip is valid, (x->may_skip || x->skip == null)
830
- //
831
- // By the spec of MuEquivalentWaiter(), it is not necessary when removing the
832
- // first runnable thread y from the front a Mutex queue to adjust the skip
833
- // field of another thread x because if x->skip==y, x->skip must (have) become
834
- // invalid before y is removed. The function TryRemove can remove a specified
835
- // thread from an arbitrary position in the queue whether runnable or not, so
836
- // it fixes up skip fields that would otherwise be left dangling.
837
- // The statement
838
- // if (x->may_skip && MuEquivalentWaiter(x, x->next)) { x->skip = x->next; }
839
- // maintains the invariant provided x is not the last waiter in a Mutex queue
840
- // The statement
841
- // if (x->skip != null) { x->skip = x->skip->skip; }
842
- // maintains the invariant.
843
-
844
- // Returns the last thread y in a mutex waiter queue such that all threads in
845
- // [x, y] inclusive share the same condition. Sets skip fields of some threads
846
- // in that range to optimize future evaluation of Skip() on x values in
847
- // the range. Requires thread x is in a mutex waiter queue.
848
- // The locking is unusual. Skip() is called under these conditions:
849
- // - spinlock is held in call from Enqueue(), with maybe_unlocking == false
850
- // - Mutex is held in call from UnlockSlow() by last unlocker, with
851
- // maybe_unlocking == true
852
- // - both Mutex and spinlock are held in call from DequeueAllWakeable() (from
853
- // UnlockSlow()) and TryRemove()
854
- // These cases are mutually exclusive, so Skip() never runs concurrently
855
- // with itself on the same Mutex. The skip chain is used in these other places
856
- // that cannot occur concurrently:
857
- // - FixSkip() (from TryRemove()) - spinlock and Mutex are held)
858
- // - Dequeue() (with spinlock and Mutex held)
859
- // - UnlockSlow() (with spinlock and Mutex held)
860
- // A more complex case is Enqueue()
861
- // - Enqueue() (with spinlock held and maybe_unlocking == false)
862
- // This is the first case in which Skip is called, above.
863
- // - Enqueue() (without spinlock held; but queue is empty and being freshly
864
- // formed)
865
- // - Enqueue() (with spinlock held and maybe_unlocking == true)
866
- // The first case has mutual exclusion, and the second isolation through
867
- // working on an otherwise unreachable data structure.
868
- // In the last case, Enqueue() is required to change no skip/next pointers
869
- // except those in the added node and the former "head" node. This implies
870
- // that the new node is added after head, and so must be the new head or the
871
- // new front of the queue.
872
- static PerThreadSynch* Skip(PerThreadSynch* x) {
873
- PerThreadSynch* x0 = nullptr;
874
- PerThreadSynch* x1 = x;
875
- PerThreadSynch* x2 = x->skip;
876
- if (x2 != nullptr) {
877
- // Each iteration attempts to advance sequence (x0,x1,x2) to next sequence
878
- // such that x1 == x0->skip && x2 == x1->skip
879
- while ((x0 = x1, x1 = x2, x2 = x2->skip) != nullptr) {
880
- x0->skip = x2; // short-circuit skip from x0 to x2
881
- }
882
- x->skip = x1; // short-circuit skip from x to result
883
- }
884
- return x1;
885
- }
886
-
887
- // "ancestor" appears before "to_be_removed" in the same Mutex waiter queue.
888
- // The latter is going to be removed out of order, because of a timeout.
889
- // Check whether "ancestor" has a skip field pointing to "to_be_removed",
890
- // and fix it if it does.
891
- static void FixSkip(PerThreadSynch* ancestor, PerThreadSynch* to_be_removed) {
892
- if (ancestor->skip == to_be_removed) { // ancestor->skip left dangling
893
- if (to_be_removed->skip != nullptr) {
894
- ancestor->skip = to_be_removed->skip; // can skip past to_be_removed
895
- } else if (ancestor->next != to_be_removed) { // they are not adjacent
896
- ancestor->skip = ancestor->next; // can skip one past ancestor
897
- } else {
898
- ancestor->skip = nullptr; // can't skip at all
899
- }
900
- }
901
- }
902
-
903
- static void CondVarEnqueue(SynchWaitParams* waitp);
904
-
905
- // Enqueue thread "waitp->thread" on a waiter queue.
906
- // Called with mutex spinlock held if head != nullptr
907
- // If head==nullptr and waitp->cv_word==nullptr, then Enqueue() is
908
- // idempotent; it alters no state associated with the existing (empty)
909
- // queue.
910
- //
911
- // If waitp->cv_word == nullptr, queue the thread at either the front or
912
- // the end (according to its priority) of the circular mutex waiter queue whose
913
- // head is "head", and return the new head. mu is the previous mutex state,
914
- // which contains the reader count (perhaps adjusted for the operation in
915
- // progress) if the list was empty and a read lock held, and the holder hint if
916
- // the list was empty and a write lock held. (flags & kMuIsCond) indicates
917
- // whether this thread was transferred from a CondVar or is waiting for a
918
- // non-trivial condition. In this case, Enqueue() never returns nullptr
919
- //
920
- // If waitp->cv_word != nullptr, CondVarEnqueue() is called, and "head" is
921
- // returned. This mechanism is used by CondVar to queue a thread on the
922
- // condition variable queue instead of the mutex queue in implementing Wait().
923
- // In this case, Enqueue() can return nullptr (if head==nullptr).
924
- static PerThreadSynch* Enqueue(PerThreadSynch* head, SynchWaitParams* waitp,
925
- intptr_t mu, int flags) {
926
- // If we have been given a cv_word, call CondVarEnqueue() and return
927
- // the previous head of the Mutex waiter queue.
928
- if (waitp->cv_word != nullptr) {
929
- CondVarEnqueue(waitp);
930
- return head;
931
- }
932
-
933
- PerThreadSynch* s = waitp->thread;
934
- ABSL_RAW_CHECK(
935
- s->waitp == nullptr || // normal case
936
- s->waitp == waitp || // Fer()---transfer from condition variable
937
- s->suppress_fatal_errors,
938
- "detected illegal recursion into Mutex code");
939
- s->waitp = waitp;
940
- s->skip = nullptr; // maintain skip invariant (see above)
941
- s->may_skip = true; // always true on entering queue
942
- s->wake = false; // not being woken
943
- s->cond_waiter = ((flags & kMuIsCond) != 0);
944
- #ifdef ABSL_HAVE_PTHREAD_GETSCHEDPARAM
945
- if ((flags & kMuIsFer) == 0) {
946
- assert(s == Synch_GetPerThread());
947
- int64_t now_cycles = CycleClock::Now();
948
- if (s->next_priority_read_cycles < now_cycles) {
949
- // Every so often, update our idea of the thread's priority.
950
- // pthread_getschedparam() is 5% of the block/wakeup time;
951
- // CycleClock::Now() is 0.5%.
952
- int policy;
953
- struct sched_param param;
954
- const int err = pthread_getschedparam(pthread_self(), &policy, &param);
955
- if (err != 0) {
956
- ABSL_RAW_LOG(ERROR, "pthread_getschedparam failed: %d", err);
957
- } else {
958
- s->priority = param.sched_priority;
959
- s->next_priority_read_cycles =
960
- now_cycles + static_cast<int64_t>(CycleClock::Frequency());
961
- }
962
- }
963
- }
964
- #endif
965
- if (head == nullptr) { // s is the only waiter
966
- s->next = s; // it's the only entry in the cycle
967
- s->readers = mu; // reader count is from mu word
968
- s->maybe_unlocking = false; // no one is searching an empty list
969
- head = s; // s is new head
970
- } else {
971
- PerThreadSynch* enqueue_after = nullptr; // we'll put s after this element
972
- #ifdef ABSL_HAVE_PTHREAD_GETSCHEDPARAM
973
- if (s->priority > head->priority) { // s's priority is above head's
974
- // try to put s in priority-fifo order, or failing that at the front.
975
- if (!head->maybe_unlocking) {
976
- // No unlocker can be scanning the queue, so we can insert into the
977
- // middle of the queue.
978
- //
979
- // Within a skip chain, all waiters have the same priority, so we can
980
- // skip forward through the chains until we find one with a lower
981
- // priority than the waiter to be enqueued.
982
- PerThreadSynch* advance_to = head; // next value of enqueue_after
983
- do {
984
- enqueue_after = advance_to;
985
- // (side-effect: optimizes skip chain)
986
- advance_to = Skip(enqueue_after->next);
987
- } while (s->priority <= advance_to->priority);
988
- // termination guaranteed because s->priority > head->priority
989
- // and head is the end of a skip chain
990
- } else if (waitp->how == kExclusive && waitp->cond == nullptr) {
991
- // An unlocker could be scanning the queue, but we know it will recheck
992
- // the queue front for writers that have no condition, which is what s
993
- // is, so an insert at front is safe.
994
- enqueue_after = head; // add after head, at front
995
- }
996
- }
997
- #endif
998
- if (enqueue_after != nullptr) {
999
- s->next = enqueue_after->next;
1000
- enqueue_after->next = s;
1001
-
1002
- // enqueue_after can be: head, Skip(...), or cur.
1003
- // The first two imply enqueue_after->skip == nullptr, and
1004
- // the last is used only if MuEquivalentWaiter(s, cur).
1005
- // We require this because clearing enqueue_after->skip
1006
- // is impossible; enqueue_after's predecessors might also
1007
- // incorrectly skip over s if we were to allow other
1008
- // insertion points.
1009
- ABSL_RAW_CHECK(enqueue_after->skip == nullptr ||
1010
- MuEquivalentWaiter(enqueue_after, s),
1011
- "Mutex Enqueue failure");
1012
-
1013
- if (enqueue_after != head && enqueue_after->may_skip &&
1014
- MuEquivalentWaiter(enqueue_after, enqueue_after->next)) {
1015
- // enqueue_after can skip to its new successor, s
1016
- enqueue_after->skip = enqueue_after->next;
1017
- }
1018
- if (MuEquivalentWaiter(s, s->next)) { // s->may_skip is known to be true
1019
- s->skip = s->next; // s may skip to its successor
1020
- }
1021
- } else if ((flags & kMuHasBlocked) &&
1022
- (s->priority >= head->next->priority) &&
1023
- (!head->maybe_unlocking ||
1024
- (waitp->how == kExclusive &&
1025
- Condition::GuaranteedEqual(waitp->cond, nullptr)))) {
1026
- // This thread has already waited, then was woken, then failed to acquire
1027
- // the mutex and now tries to requeue. Try to requeue it at head,
1028
- // otherwise it can suffer bad latency (wait whole queue several times).
1029
- // However, we need to be conservative. First, we need to ensure that we
1030
- // respect priorities. Then, we need to be careful to not break wait
1031
- // queue invariants: we require either that unlocker is not scanning
1032
- // the queue or that the current thread is a writer with no condition
1033
- // (unlocker will recheck the queue for such waiters).
1034
- s->next = head->next;
1035
- head->next = s;
1036
- if (MuEquivalentWaiter(s, s->next)) { // s->may_skip is known to be true
1037
- s->skip = s->next; // s may skip to its successor
1038
- }
1039
- } else { // enqueue not done any other way, so
1040
- // we're inserting s at the back
1041
- // s will become new head; copy data from head into it
1042
- s->next = head->next; // add s after head
1043
- head->next = s;
1044
- s->readers = head->readers; // reader count is from previous head
1045
- s->maybe_unlocking = head->maybe_unlocking; // same for unlock hint
1046
- if (head->may_skip && MuEquivalentWaiter(head, s)) {
1047
- // head now has successor; may skip
1048
- head->skip = s;
1049
- }
1050
- head = s; // s is new head
1051
- }
1052
- }
1053
- s->state.store(PerThreadSynch::kQueued, std::memory_order_relaxed);
1054
- return head;
1055
- }
1056
-
1057
- // Dequeue the successor pw->next of thread pw from the Mutex waiter queue
1058
- // whose last element is head. The new head element is returned, or null
1059
- // if the list is made empty.
1060
- // Dequeue is called with both spinlock and Mutex held.
1061
- static PerThreadSynch* Dequeue(PerThreadSynch* head, PerThreadSynch* pw) {
1062
- PerThreadSynch* w = pw->next;
1063
- pw->next = w->next; // snip w out of list
1064
- if (head == w) { // we removed the head
1065
- head = (pw == w) ? nullptr : pw; // either emptied list, or pw is new head
1066
- } else if (pw != head && MuEquivalentWaiter(pw, pw->next)) {
1067
- // pw can skip to its new successor
1068
- if (pw->next->skip !=
1069
- nullptr) { // either skip to its successors skip target
1070
- pw->skip = pw->next->skip;
1071
- } else { // or to pw's successor
1072
- pw->skip = pw->next;
1073
- }
1074
- }
1075
- return head;
1076
- }
1077
-
1078
- // Traverse the elements [ pw->next, h] of the circular list whose last element
1079
- // is head.
1080
- // Remove all elements with wake==true and place them in the
1081
- // singly-linked list wake_list in the order found. Assumes that
1082
- // there is only one such element if the element has how == kExclusive.
1083
- // Return the new head.
1084
- static PerThreadSynch* DequeueAllWakeable(PerThreadSynch* head,
1085
- PerThreadSynch* pw,
1086
- PerThreadSynch** wake_tail) {
1087
- PerThreadSynch* orig_h = head;
1088
- PerThreadSynch* w = pw->next;
1089
- bool skipped = false;
1090
- do {
1091
- if (w->wake) { // remove this element
1092
- ABSL_RAW_CHECK(pw->skip == nullptr, "bad skip in DequeueAllWakeable");
1093
- // we're removing pw's successor so either pw->skip is zero or we should
1094
- // already have removed pw since if pw->skip!=null, pw has the same
1095
- // condition as w.
1096
- head = Dequeue(head, pw);
1097
- w->next = *wake_tail; // keep list terminated
1098
- *wake_tail = w; // add w to wake_list;
1099
- wake_tail = &w->next; // next addition to end
1100
- if (w->waitp->how == kExclusive) { // wake at most 1 writer
1101
- break;
1102
- }
1103
- } else { // not waking this one; skip
1104
- pw = Skip(w); // skip as much as possible
1105
- skipped = true;
1106
- }
1107
- w = pw->next;
1108
- // We want to stop processing after we've considered the original head,
1109
- // orig_h. We can't test for w==orig_h in the loop because w may skip over
1110
- // it; we are guaranteed only that w's predecessor will not skip over
1111
- // orig_h. When we've considered orig_h, either we've processed it and
1112
- // removed it (so orig_h != head), or we considered it and skipped it (so
1113
- // skipped==true && pw == head because skipping from head always skips by
1114
- // just one, leaving pw pointing at head). So we want to
1115
- // continue the loop with the negation of that expression.
1116
- } while (orig_h == head && (pw != head || !skipped));
1117
- return head;
1118
- }
1119
-
1120
- // Try to remove thread s from the list of waiters on this mutex.
1121
- // Does nothing if s is not on the waiter list.
1122
- void Mutex::TryRemove(PerThreadSynch* s) {
1123
- SchedulingGuard::ScopedDisable disable_rescheduling;
1124
- intptr_t v = mu_.load(std::memory_order_relaxed);
1125
- // acquire spinlock & lock
1126
- if ((v & (kMuWait | kMuSpin | kMuWriter | kMuReader)) == kMuWait &&
1127
- mu_.compare_exchange_strong(v, v | kMuSpin | kMuWriter,
1128
- std::memory_order_acquire,
1129
- std::memory_order_relaxed)) {
1130
- PerThreadSynch* h = GetPerThreadSynch(v);
1131
- if (h != nullptr) {
1132
- PerThreadSynch* pw = h; // pw is w's predecessor
1133
- PerThreadSynch* w;
1134
- if ((w = pw->next) != s) { // search for thread,
1135
- do { // processing at least one element
1136
- // If the current element isn't equivalent to the waiter to be
1137
- // removed, we can skip the entire chain.
1138
- if (!MuEquivalentWaiter(s, w)) {
1139
- pw = Skip(w); // so skip all that won't match
1140
- // we don't have to worry about dangling skip fields
1141
- // in the threads we skipped; none can point to s
1142
- // because they are in a different equivalence class.
1143
- } else { // seeking same condition
1144
- FixSkip(w, s); // fix up any skip pointer from w to s
1145
- pw = w;
1146
- }
1147
- // don't search further if we found the thread, or we're about to
1148
- // process the first thread again.
1149
- } while ((w = pw->next) != s && pw != h);
1150
- }
1151
- if (w == s) { // found thread; remove it
1152
- // pw->skip may be non-zero here; the loop above ensured that
1153
- // no ancestor of s can skip to s, so removal is safe anyway.
1154
- h = Dequeue(h, pw);
1155
- s->next = nullptr;
1156
- s->state.store(PerThreadSynch::kAvailable, std::memory_order_release);
1157
- }
1158
- }
1159
- intptr_t nv;
1160
- do { // release spinlock and lock
1161
- v = mu_.load(std::memory_order_relaxed);
1162
- nv = v & (kMuDesig | kMuEvent);
1163
- if (h != nullptr) {
1164
- nv |= kMuWait | reinterpret_cast<intptr_t>(h);
1165
- h->readers = 0; // we hold writer lock
1166
- h->maybe_unlocking = false; // finished unlocking
1167
- }
1168
- } while (!mu_.compare_exchange_weak(v, nv, std::memory_order_release,
1169
- std::memory_order_relaxed));
1170
- }
1171
- }
1172
-
1173
- // Wait until thread "s", which must be the current thread, is removed from the
1174
- // this mutex's waiter queue. If "s->waitp->timeout" has a timeout, wake up
1175
- // if the wait extends past the absolute time specified, even if "s" is still
1176
- // on the mutex queue. In this case, remove "s" from the queue and return
1177
- // true, otherwise return false.
1178
- void Mutex::Block(PerThreadSynch* s) {
1179
- while (s->state.load(std::memory_order_acquire) == PerThreadSynch::kQueued) {
1180
- if (!DecrementSynchSem(this, s, s->waitp->timeout)) {
1181
- // After a timeout, we go into a spin loop until we remove ourselves
1182
- // from the queue, or someone else removes us. We can't be sure to be
1183
- // able to remove ourselves in a single lock acquisition because this
1184
- // mutex may be held, and the holder has the right to read the centre
1185
- // of the waiter queue without holding the spinlock.
1186
- this->TryRemove(s);
1187
- int c = 0;
1188
- while (s->next != nullptr) {
1189
- c = synchronization_internal::MutexDelay(c, GENTLE);
1190
- this->TryRemove(s);
1191
- }
1192
- if (kDebugMode) {
1193
- // This ensures that we test the case that TryRemove() is called when s
1194
- // is not on the queue.
1195
- this->TryRemove(s);
1196
- }
1197
- s->waitp->timeout = KernelTimeout::Never(); // timeout is satisfied
1198
- s->waitp->cond = nullptr; // condition no longer relevant for wakeups
1199
- }
1200
- }
1201
- ABSL_RAW_CHECK(s->waitp != nullptr || s->suppress_fatal_errors,
1202
- "detected illegal recursion in Mutex code");
1203
- s->waitp = nullptr;
1204
- }
1205
-
1206
- // Wake thread w, and return the next thread in the list.
1207
- PerThreadSynch* Mutex::Wakeup(PerThreadSynch* w) {
1208
- PerThreadSynch* next = w->next;
1209
- w->next = nullptr;
1210
- w->state.store(PerThreadSynch::kAvailable, std::memory_order_release);
1211
- IncrementSynchSem(this, w);
1212
-
1213
- return next;
1214
- }
1215
-
1216
- static GraphId GetGraphIdLocked(Mutex* mu)
1217
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(deadlock_graph_mu) {
1218
- if (!deadlock_graph) { // (re)create the deadlock graph.
1219
- deadlock_graph =
1220
- new (base_internal::LowLevelAlloc::Alloc(sizeof(*deadlock_graph)))
1221
- GraphCycles;
1222
- }
1223
- return deadlock_graph->GetId(mu);
1224
- }
1225
-
1226
- static GraphId GetGraphId(Mutex* mu) ABSL_LOCKS_EXCLUDED(deadlock_graph_mu) {
1227
- base_internal::SpinLockHolder l(deadlock_graph_mu);
1228
- GraphId id = GetGraphIdLocked(mu);
1229
- return id;
1230
- }
1231
-
1232
- // Record a lock acquisition. This is used in debug mode for deadlock
1233
- // detection. The held_locks pointer points to the relevant data
1234
- // structure for each case.
1235
- static void LockEnter(Mutex* mu, GraphId id, SynchLocksHeld* held_locks) {
1236
- int n = held_locks->n;
1237
- int i = 0;
1238
- while (i != n && held_locks->locks[i].id != id) {
1239
- i++;
1240
- }
1241
- if (i == n) {
1242
- if (n == ABSL_ARRAYSIZE(held_locks->locks)) {
1243
- held_locks->overflow = true; // lost some data
1244
- } else { // we have room for lock
1245
- held_locks->locks[i].mu = mu;
1246
- held_locks->locks[i].count = 1;
1247
- held_locks->locks[i].id = id;
1248
- held_locks->n = n + 1;
1249
- }
1250
- } else {
1251
- held_locks->locks[i].count++;
1252
- }
1253
- }
1254
-
1255
- // Record a lock release. Each call to LockEnter(mu, id, x) should be
1256
- // eventually followed by a call to LockLeave(mu, id, x) by the same thread.
1257
- // It does not process the event if is not needed when deadlock detection is
1258
- // disabled.
1259
- static void LockLeave(Mutex* mu, GraphId id, SynchLocksHeld* held_locks) {
1260
- int n = held_locks->n;
1261
- int i = 0;
1262
- while (i != n && held_locks->locks[i].id != id) {
1263
- i++;
1264
- }
1265
- if (i == n) {
1266
- if (!held_locks->overflow) {
1267
- // The deadlock id may have been reassigned after ForgetDeadlockInfo,
1268
- // but in that case mu should still be present.
1269
- i = 0;
1270
- while (i != n && held_locks->locks[i].mu != mu) {
1271
- i++;
1272
- }
1273
- if (i == n) { // mu missing means releasing unheld lock
1274
- SynchEvent* mu_events = GetSynchEvent(mu);
1275
- ABSL_RAW_LOG(FATAL,
1276
- "thread releasing lock it does not hold: %p %s; "
1277
- ,
1278
- static_cast<void*>(mu),
1279
- mu_events == nullptr ? "" : mu_events->name);
1280
- }
1281
- }
1282
- } else if (held_locks->locks[i].count == 1) {
1283
- held_locks->n = n - 1;
1284
- held_locks->locks[i] = held_locks->locks[n - 1];
1285
- held_locks->locks[n - 1].id = InvalidGraphId();
1286
- held_locks->locks[n - 1].mu =
1287
- nullptr; // clear mu to please the leak detector.
1288
- } else {
1289
- assert(held_locks->locks[i].count > 0);
1290
- held_locks->locks[i].count--;
1291
- }
1292
- }
1293
-
1294
- // Call LockEnter() if in debug mode and deadlock detection is enabled.
1295
- static inline void DebugOnlyLockEnter(Mutex* mu) {
1296
- if (kDebugMode) {
1297
- if (synch_deadlock_detection.load(std::memory_order_acquire) !=
1298
- OnDeadlockCycle::kIgnore) {
1299
- LockEnter(mu, GetGraphId(mu), Synch_GetAllLocks());
1300
- }
1301
- }
1302
- }
1303
-
1304
- // Call LockEnter() if in debug mode and deadlock detection is enabled.
1305
- static inline void DebugOnlyLockEnter(Mutex* mu, GraphId id) {
1306
- if (kDebugMode) {
1307
- if (synch_deadlock_detection.load(std::memory_order_acquire) !=
1308
- OnDeadlockCycle::kIgnore) {
1309
- LockEnter(mu, id, Synch_GetAllLocks());
1310
- }
1311
- }
1312
- }
1313
-
1314
- // Call LockLeave() if in debug mode and deadlock detection is enabled.
1315
- static inline void DebugOnlyLockLeave(Mutex* mu) {
1316
- if (kDebugMode) {
1317
- if (synch_deadlock_detection.load(std::memory_order_acquire) !=
1318
- OnDeadlockCycle::kIgnore) {
1319
- LockLeave(mu, GetGraphId(mu), Synch_GetAllLocks());
1320
- }
1321
- }
1322
- }
1323
-
1324
- static char* StackString(void** pcs, int n, char* buf, int maxlen,
1325
- bool symbolize) {
1326
- static constexpr int kSymLen = 200;
1327
- char sym[kSymLen];
1328
- int len = 0;
1329
- for (int i = 0; i != n; i++) {
1330
- if (len >= maxlen) return buf;
1331
- size_t count = static_cast<size_t>(maxlen - len);
1332
- if (symbolize) {
1333
- if (!absl::Symbolize(pcs[i], sym, kSymLen)) {
1334
- sym[0] = '\0';
1335
- }
1336
- snprintf(buf + len, count, "%s\t@ %p %s\n", (i == 0 ? "\n" : ""), pcs[i],
1337
- sym);
1338
- } else {
1339
- snprintf(buf + len, count, " %p", pcs[i]);
1340
- }
1341
- len += static_cast<int>(strlen(&buf[len]));
1342
- }
1343
- return buf;
1344
- }
1345
-
1346
- static char* CurrentStackString(char* buf, int maxlen, bool symbolize) {
1347
- void* pcs[40];
1348
- return StackString(pcs, absl::GetStackTrace(pcs, ABSL_ARRAYSIZE(pcs), 2), buf,
1349
- maxlen, symbolize);
1350
- }
1351
-
1352
- namespace {
1353
- enum {
1354
- kMaxDeadlockPathLen = 10
1355
- }; // maximum length of a deadlock cycle;
1356
- // a path this long would be remarkable
1357
- // Buffers required to report a deadlock.
1358
- // We do not allocate them on stack to avoid large stack frame.
1359
- struct DeadlockReportBuffers {
1360
- char buf[6100];
1361
- GraphId path[kMaxDeadlockPathLen];
1362
- };
1363
-
1364
- struct ScopedDeadlockReportBuffers {
1365
- ScopedDeadlockReportBuffers() {
1366
- b = reinterpret_cast<DeadlockReportBuffers*>(
1367
- base_internal::LowLevelAlloc::Alloc(sizeof(*b)));
1368
- }
1369
- ~ScopedDeadlockReportBuffers() { base_internal::LowLevelAlloc::Free(b); }
1370
- DeadlockReportBuffers* b;
1371
- };
1372
-
1373
- // Helper to pass to GraphCycles::UpdateStackTrace.
1374
- int GetStack(void** stack, int max_depth) {
1375
- return absl::GetStackTrace(stack, max_depth, 3);
1376
- }
1377
- } // anonymous namespace
1378
-
1379
- // Called in debug mode when a thread is about to acquire a lock in a way that
1380
- // may block.
1381
- static GraphId DeadlockCheck(Mutex* mu) {
1382
- if (synch_deadlock_detection.load(std::memory_order_acquire) ==
1383
- OnDeadlockCycle::kIgnore) {
1384
- return InvalidGraphId();
1385
- }
1386
-
1387
- SynchLocksHeld* all_locks = Synch_GetAllLocks();
1388
-
1389
- absl::base_internal::SpinLockHolder lock(deadlock_graph_mu);
1390
- const GraphId mu_id = GetGraphIdLocked(mu);
1391
-
1392
- if (all_locks->n == 0) {
1393
- // There are no other locks held. Return now so that we don't need to
1394
- // call GetSynchEvent(). This way we do not record the stack trace
1395
- // for this Mutex. It's ok, since if this Mutex is involved in a deadlock,
1396
- // it can't always be the first lock acquired by a thread.
1397
- return mu_id;
1398
- }
1399
-
1400
- // We prefer to keep stack traces that show a thread holding and acquiring
1401
- // as many locks as possible. This increases the chances that a given edge
1402
- // in the acquires-before graph will be represented in the stack traces
1403
- // recorded for the locks.
1404
- deadlock_graph->UpdateStackTrace(mu_id, all_locks->n + 1, GetStack);
1405
-
1406
- // For each other mutex already held by this thread:
1407
- for (int i = 0; i != all_locks->n; i++) {
1408
- const GraphId other_node_id = all_locks->locks[i].id;
1409
- const Mutex* other =
1410
- static_cast<const Mutex*>(deadlock_graph->Ptr(other_node_id));
1411
- if (other == nullptr) {
1412
- // Ignore stale lock
1413
- continue;
1414
- }
1415
-
1416
- // Add the acquired-before edge to the graph.
1417
- if (!deadlock_graph->InsertEdge(other_node_id, mu_id)) {
1418
- ScopedDeadlockReportBuffers scoped_buffers;
1419
- DeadlockReportBuffers* b = scoped_buffers.b;
1420
- static int number_of_reported_deadlocks = 0;
1421
- number_of_reported_deadlocks++;
1422
- // Symbolize only 2 first deadlock report to avoid huge slowdowns.
1423
- bool symbolize = number_of_reported_deadlocks <= 2;
1424
- ABSL_RAW_LOG(ERROR, "Potential Mutex deadlock: %s",
1425
- CurrentStackString(b->buf, sizeof (b->buf), symbolize));
1426
- size_t len = 0;
1427
- for (int j = 0; j != all_locks->n; j++) {
1428
- void* pr = deadlock_graph->Ptr(all_locks->locks[j].id);
1429
- if (pr != nullptr) {
1430
- snprintf(b->buf + len, sizeof(b->buf) - len, " %p", pr);
1431
- len += strlen(&b->buf[len]);
1432
- }
1433
- }
1434
- ABSL_RAW_LOG(ERROR,
1435
- "Acquiring absl::Mutex %p while holding %s; a cycle in the "
1436
- "historical lock ordering graph has been observed",
1437
- static_cast<void*>(mu), b->buf);
1438
- ABSL_RAW_LOG(ERROR, "Cycle: ");
1439
- int path_len = deadlock_graph->FindPath(mu_id, other_node_id,
1440
- ABSL_ARRAYSIZE(b->path), b->path);
1441
- for (int j = 0; j != path_len && j != ABSL_ARRAYSIZE(b->path); j++) {
1442
- GraphId id = b->path[j];
1443
- Mutex* path_mu = static_cast<Mutex*>(deadlock_graph->Ptr(id));
1444
- if (path_mu == nullptr) continue;
1445
- void** stack;
1446
- int depth = deadlock_graph->GetStackTrace(id, &stack);
1447
- snprintf(b->buf, sizeof(b->buf),
1448
- "mutex@%p stack: ", static_cast<void*>(path_mu));
1449
- StackString(stack, depth, b->buf + strlen(b->buf),
1450
- static_cast<int>(sizeof(b->buf) - strlen(b->buf)),
1451
- symbolize);
1452
- ABSL_RAW_LOG(ERROR, "%s", b->buf);
1453
- }
1454
- if (path_len > static_cast<int>(ABSL_ARRAYSIZE(b->path))) {
1455
- ABSL_RAW_LOG(ERROR, "(long cycle; list truncated)");
1456
- }
1457
- if (synch_deadlock_detection.load(std::memory_order_acquire) ==
1458
- OnDeadlockCycle::kAbort) {
1459
- deadlock_graph_mu.unlock(); // avoid deadlock in fatal sighandler
1460
- ABSL_RAW_LOG(FATAL, "dying due to potential deadlock");
1461
- return mu_id;
1462
- }
1463
- break; // report at most one potential deadlock per acquisition
1464
- }
1465
- }
1466
-
1467
- return mu_id;
1468
- }
1469
-
1470
- // Invoke DeadlockCheck() iff we're in debug mode and
1471
- // deadlock checking has been enabled.
1472
- static inline GraphId DebugOnlyDeadlockCheck(Mutex* mu) {
1473
- if (kDebugMode && synch_deadlock_detection.load(std::memory_order_acquire) !=
1474
- OnDeadlockCycle::kIgnore) {
1475
- return DeadlockCheck(mu);
1476
- } else {
1477
- return InvalidGraphId();
1478
- }
1479
- }
1480
-
1481
- void Mutex::ForgetDeadlockInfo() {
1482
- if (kDebugMode && synch_deadlock_detection.load(std::memory_order_acquire) !=
1483
- OnDeadlockCycle::kIgnore) {
1484
- deadlock_graph_mu.lock();
1485
- if (deadlock_graph != nullptr) {
1486
- deadlock_graph->RemoveNode(this);
1487
- }
1488
- deadlock_graph_mu.unlock();
1489
- }
1490
- }
1491
-
1492
- void Mutex::AssertNotHeld() const {
1493
- // We have the data to allow this check only if in debug mode and deadlock
1494
- // detection is enabled.
1495
- if (kDebugMode &&
1496
- (mu_.load(std::memory_order_relaxed) & (kMuWriter | kMuReader)) != 0 &&
1497
- synch_deadlock_detection.load(std::memory_order_acquire) !=
1498
- OnDeadlockCycle::kIgnore) {
1499
- GraphId id = GetGraphId(const_cast<Mutex*>(this));
1500
- SynchLocksHeld* locks = Synch_GetAllLocks();
1501
- for (int i = 0; i != locks->n; i++) {
1502
- if (locks->locks[i].id == id) {
1503
- SynchEvent* mu_events = GetSynchEvent(this);
1504
- ABSL_RAW_LOG(FATAL, "thread should not hold mutex %p %s",
1505
- static_cast<const void*>(this),
1506
- (mu_events == nullptr ? "" : mu_events->name));
1507
- }
1508
- }
1509
- }
1510
- }
1511
-
1512
- // Attempt to acquire *mu, and return whether successful. The implementation
1513
- // may spin for a short while if the lock cannot be acquired immediately.
1514
- static bool TryAcquireWithSpinning(std::atomic<intptr_t>* mu) {
1515
- int c = globals.spinloop_iterations.load(std::memory_order_relaxed);
1516
- do { // do/while somewhat faster on AMD
1517
- intptr_t v = mu->load(std::memory_order_relaxed);
1518
- if ((v & (kMuReader | kMuEvent)) != 0) {
1519
- return false; // a reader or tracing -> give up
1520
- } else if (((v & kMuWriter) == 0) && // no holder -> try to acquire
1521
- mu->compare_exchange_strong(v, kMuWriter | v,
1522
- std::memory_order_acquire,
1523
- std::memory_order_relaxed)) {
1524
- return true;
1525
- }
1526
- } while (--c > 0);
1527
- return false;
1528
- }
1529
-
1530
- void Mutex::lock() {
1531
- ABSL_TSAN_MUTEX_PRE_LOCK(this, 0);
1532
- GraphId id = DebugOnlyDeadlockCheck(this);
1533
- intptr_t v = mu_.load(std::memory_order_relaxed);
1534
- // try fast acquire, then spin loop
1535
- if (ABSL_PREDICT_FALSE((v & (kMuWriter | kMuReader | kMuEvent)) != 0) ||
1536
- ABSL_PREDICT_FALSE(!mu_.compare_exchange_strong(
1537
- v, kMuWriter | v, std::memory_order_acquire,
1538
- std::memory_order_relaxed))) {
1539
- // try spin acquire, then slow loop
1540
- if (ABSL_PREDICT_FALSE(!TryAcquireWithSpinning(&this->mu_))) {
1541
- this->LockSlow(kExclusive, nullptr, 0);
1542
- }
1543
- }
1544
- DebugOnlyLockEnter(this, id);
1545
- ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0);
1546
- }
1547
-
1548
- void Mutex::lock_shared() {
1549
- ABSL_TSAN_MUTEX_PRE_LOCK(this, __tsan_mutex_read_lock);
1550
- GraphId id = DebugOnlyDeadlockCheck(this);
1551
- intptr_t v = mu_.load(std::memory_order_relaxed);
1552
- for (;;) {
1553
- // If there are non-readers holding the lock, use the slow loop.
1554
- if (ABSL_PREDICT_FALSE(v & (kMuWriter | kMuWait | kMuEvent)) != 0) {
1555
- this->LockSlow(kShared, nullptr, 0);
1556
- break;
1557
- }
1558
- // We can avoid the loop and only use the CAS when the lock is free or
1559
- // only held by readers.
1560
- if (ABSL_PREDICT_TRUE(mu_.compare_exchange_weak(
1561
- v, (kMuReader | v) + kMuOne, std::memory_order_acquire,
1562
- std::memory_order_relaxed))) {
1563
- break;
1564
- }
1565
- }
1566
- DebugOnlyLockEnter(this, id);
1567
- ABSL_TSAN_MUTEX_POST_LOCK(this, __tsan_mutex_read_lock, 0);
1568
- }
1569
-
1570
- bool Mutex::LockWhenCommon(const Condition& cond,
1571
- synchronization_internal::KernelTimeout t,
1572
- bool write) {
1573
- MuHow how = write ? kExclusive : kShared;
1574
- ABSL_TSAN_MUTEX_PRE_LOCK(this, TsanFlags(how));
1575
- GraphId id = DebugOnlyDeadlockCheck(this);
1576
- bool res = LockSlowWithDeadline(how, &cond, t, 0);
1577
- DebugOnlyLockEnter(this, id);
1578
- ABSL_TSAN_MUTEX_POST_LOCK(this, TsanFlags(how), 0);
1579
- return res;
1580
- }
1581
-
1582
- bool Mutex::AwaitCommon(const Condition& cond, KernelTimeout t) {
1583
- if (kDebugMode) {
1584
- this->AssertReaderHeld();
1585
- }
1586
- if (cond.Eval()) { // condition already true; nothing to do
1587
- return true;
1588
- }
1589
- MuHow how =
1590
- (mu_.load(std::memory_order_relaxed) & kMuWriter) ? kExclusive : kShared;
1591
- ABSL_TSAN_MUTEX_PRE_UNLOCK(this, TsanFlags(how));
1592
- SynchWaitParams waitp(how, &cond, t, nullptr /*no cvmu*/,
1593
- Synch_GetPerThreadAnnotated(this),
1594
- nullptr /*no cv_word*/);
1595
- this->UnlockSlow(&waitp);
1596
- this->Block(waitp.thread);
1597
- ABSL_TSAN_MUTEX_POST_UNLOCK(this, TsanFlags(how));
1598
- ABSL_TSAN_MUTEX_PRE_LOCK(this, TsanFlags(how));
1599
- this->LockSlowLoop(&waitp, kMuHasBlocked | kMuIsCond);
1600
- bool res = waitp.cond != nullptr || // => cond known true from LockSlowLoop
1601
- EvalConditionAnnotated(&cond, this, true, false, how == kShared);
1602
- ABSL_TSAN_MUTEX_POST_LOCK(this, TsanFlags(how), 0);
1603
- ABSL_RAW_CHECK(res || t.has_timeout(),
1604
- "condition untrue on return from Await");
1605
- return res;
1606
- }
1607
-
1608
- bool Mutex::try_lock() {
1609
- ABSL_TSAN_MUTEX_PRE_LOCK(this, __tsan_mutex_try_lock);
1610
- intptr_t v = mu_.load(std::memory_order_relaxed);
1611
- // Try fast acquire.
1612
- if (ABSL_PREDICT_TRUE((v & (kMuWriter | kMuReader | kMuEvent)) == 0)) {
1613
- if (ABSL_PREDICT_TRUE(mu_.compare_exchange_strong(
1614
- v, kMuWriter | v, std::memory_order_acquire,
1615
- std::memory_order_relaxed))) {
1616
- DebugOnlyLockEnter(this);
1617
- ABSL_TSAN_MUTEX_POST_LOCK(this, __tsan_mutex_try_lock, 0);
1618
- return true;
1619
- }
1620
- } else if (ABSL_PREDICT_FALSE((v & kMuEvent) != 0)) {
1621
- // We're recording events.
1622
- return TryLockSlow();
1623
- }
1624
- ABSL_TSAN_MUTEX_POST_LOCK(
1625
- this, __tsan_mutex_try_lock | __tsan_mutex_try_lock_failed, 0);
1626
- return false;
1627
- }
1628
-
1629
- ABSL_ATTRIBUTE_NOINLINE bool Mutex::TryLockSlow() {
1630
- intptr_t v = mu_.load(std::memory_order_relaxed);
1631
- if ((v & kExclusive->slow_need_zero) == 0 && // try fast acquire
1632
- mu_.compare_exchange_strong(
1633
- v, (kExclusive->fast_or | v) + kExclusive->fast_add,
1634
- std::memory_order_acquire, std::memory_order_relaxed)) {
1635
- DebugOnlyLockEnter(this);
1636
- PostSynchEvent(this, SYNCH_EV_TRYLOCK_SUCCESS);
1637
- ABSL_TSAN_MUTEX_POST_LOCK(this, __tsan_mutex_try_lock, 0);
1638
- return true;
1639
- }
1640
- PostSynchEvent(this, SYNCH_EV_TRYLOCK_FAILED);
1641
- ABSL_TSAN_MUTEX_POST_LOCK(
1642
- this, __tsan_mutex_try_lock | __tsan_mutex_try_lock_failed, 0);
1643
- return false;
1644
- }
1645
-
1646
- bool Mutex::try_lock_shared() {
1647
- ABSL_TSAN_MUTEX_PRE_LOCK(this,
1648
- __tsan_mutex_read_lock | __tsan_mutex_try_lock);
1649
- intptr_t v = mu_.load(std::memory_order_relaxed);
1650
- // Clang tends to unroll the loop when compiling with optimization.
1651
- // But in this case it just unnecessary increases code size.
1652
- // If CAS is failing due to contention, the jump cost is negligible.
1653
- #if defined(__clang__)
1654
- #pragma nounroll
1655
- #endif
1656
- // The while-loops (here and below) iterate only if the mutex word keeps
1657
- // changing (typically because the reader count changes) under the CAS.
1658
- // We limit the number of attempts to avoid having to think about livelock.
1659
- for (int loop_limit = 5; loop_limit != 0; loop_limit--) {
1660
- if (ABSL_PREDICT_FALSE((v & (kMuWriter | kMuWait | kMuEvent)) != 0)) {
1661
- break;
1662
- }
1663
- if (ABSL_PREDICT_TRUE(mu_.compare_exchange_strong(
1664
- v, (kMuReader | v) + kMuOne, std::memory_order_acquire,
1665
- std::memory_order_relaxed))) {
1666
- DebugOnlyLockEnter(this);
1667
- ABSL_TSAN_MUTEX_POST_LOCK(
1668
- this, __tsan_mutex_read_lock | __tsan_mutex_try_lock, 0);
1669
- return true;
1670
- }
1671
- }
1672
- if (ABSL_PREDICT_TRUE((v & kMuEvent) == 0)) {
1673
- ABSL_TSAN_MUTEX_POST_LOCK(this,
1674
- __tsan_mutex_read_lock | __tsan_mutex_try_lock |
1675
- __tsan_mutex_try_lock_failed,
1676
- 0);
1677
- return false;
1678
- }
1679
- // we're recording events
1680
- return ReaderTryLockSlow();
1681
- }
1682
-
1683
- ABSL_ATTRIBUTE_NOINLINE bool Mutex::ReaderTryLockSlow() {
1684
- intptr_t v = mu_.load(std::memory_order_relaxed);
1685
- #if defined(__clang__)
1686
- #pragma nounroll
1687
- #endif
1688
- for (int loop_limit = 5; loop_limit != 0; loop_limit--) {
1689
- if ((v & kShared->slow_need_zero) == 0 &&
1690
- mu_.compare_exchange_strong(v, (kMuReader | v) + kMuOne,
1691
- std::memory_order_acquire,
1692
- std::memory_order_relaxed)) {
1693
- DebugOnlyLockEnter(this);
1694
- PostSynchEvent(this, SYNCH_EV_READERTRYLOCK_SUCCESS);
1695
- ABSL_TSAN_MUTEX_POST_LOCK(
1696
- this, __tsan_mutex_read_lock | __tsan_mutex_try_lock, 0);
1697
- return true;
1698
- }
1699
- }
1700
- PostSynchEvent(this, SYNCH_EV_READERTRYLOCK_FAILED);
1701
- ABSL_TSAN_MUTEX_POST_LOCK(this,
1702
- __tsan_mutex_read_lock | __tsan_mutex_try_lock |
1703
- __tsan_mutex_try_lock_failed,
1704
- 0);
1705
- return false;
1706
- }
1707
-
1708
- void Mutex::unlock() {
1709
- ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0);
1710
- DebugOnlyLockLeave(this);
1711
- intptr_t v = mu_.load(std::memory_order_relaxed);
1712
-
1713
- if (kDebugMode && ((v & (kMuWriter | kMuReader)) != kMuWriter)) {
1714
- ABSL_RAW_LOG(FATAL, "Mutex unlocked when destroyed or not locked: v=0x%x",
1715
- static_cast<unsigned>(v));
1716
- }
1717
-
1718
- // should_try_cas is whether we'll try a compare-and-swap immediately.
1719
- // NOTE: optimized out when kDebugMode is false.
1720
- bool should_try_cas = ((v & (kMuEvent | kMuWriter)) == kMuWriter &&
1721
- (v & (kMuWait | kMuDesig)) != kMuWait);
1722
-
1723
- // But, we can use an alternate computation of it, that compilers
1724
- // currently don't find on their own. When that changes, this function
1725
- // can be simplified.
1726
- //
1727
- // should_try_cas is true iff the bits satisfy the following conditions:
1728
- //
1729
- // Ev Wr Wa De
1730
- // equal to 0 1
1731
- // and not equal to 1 0
1732
- //
1733
- // after xoring by 0 1 0 1, this is equivalent to:
1734
- //
1735
- // equal to 0 0
1736
- // and not equal to 1 1, which is the same as:
1737
- //
1738
- // smaller than 0 0 1 1
1739
- static_assert(kMuEvent > kMuWait, "Needed for should_try_cas_fast");
1740
- static_assert(kMuEvent > kMuDesig, "Needed for should_try_cas_fast");
1741
- static_assert(kMuWriter > kMuWait, "Needed for should_try_cas_fast");
1742
- static_assert(kMuWriter > kMuDesig, "Needed for should_try_cas_fast");
1743
-
1744
- bool should_try_cas_fast =
1745
- ((v ^ (kMuWriter | kMuDesig)) &
1746
- (kMuEvent | kMuWriter | kMuWait | kMuDesig)) < (kMuWait | kMuDesig);
1747
-
1748
- if (kDebugMode && should_try_cas != should_try_cas_fast) {
1749
- // We would usually use PRIdPTR here, but is not correctly implemented
1750
- // within the android toolchain.
1751
- ABSL_RAW_LOG(FATAL, "internal logic error %llx %llx %llx\n",
1752
- static_cast<long long>(v),
1753
- static_cast<long long>(should_try_cas),
1754
- static_cast<long long>(should_try_cas_fast));
1755
- }
1756
- if (should_try_cas_fast &&
1757
- mu_.compare_exchange_strong(v, v & ~(kMuWrWait | kMuWriter),
1758
- std::memory_order_release,
1759
- std::memory_order_relaxed)) {
1760
- // fast writer release (writer with no waiters or with designated waker)
1761
- } else {
1762
- this->UnlockSlow(nullptr /*no waitp*/); // take slow path
1763
- }
1764
- ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0);
1765
- }
1766
-
1767
- // Requires v to represent a reader-locked state.
1768
- static bool ExactlyOneReader(intptr_t v) {
1769
- assert((v & (kMuWriter | kMuReader)) == kMuReader);
1770
- assert((v & kMuHigh) != 0);
1771
- // The more straightforward "(v & kMuHigh) == kMuOne" also works, but
1772
- // on some architectures the following generates slightly smaller code.
1773
- // It may be faster too.
1774
- constexpr intptr_t kMuMultipleWaitersMask = kMuHigh ^ kMuOne;
1775
- return (v & kMuMultipleWaitersMask) == 0;
1776
- }
1777
-
1778
- void Mutex::unlock_shared() {
1779
- ABSL_TSAN_MUTEX_PRE_UNLOCK(this, __tsan_mutex_read_lock);
1780
- DebugOnlyLockLeave(this);
1781
- intptr_t v = mu_.load(std::memory_order_relaxed);
1782
- assert((v & (kMuWriter | kMuReader)) == kMuReader);
1783
- for (;;) {
1784
- if (ABSL_PREDICT_FALSE((v & (kMuReader | kMuWait | kMuEvent)) !=
1785
- kMuReader)) {
1786
- this->UnlockSlow(nullptr /*no waitp*/); // take slow path
1787
- break;
1788
- }
1789
- // fast reader release (reader with no waiters)
1790
- intptr_t clear = ExactlyOneReader(v) ? kMuReader | kMuOne : kMuOne;
1791
- if (ABSL_PREDICT_TRUE(
1792
- mu_.compare_exchange_strong(v, v - clear, std::memory_order_release,
1793
- std::memory_order_relaxed))) {
1794
- break;
1795
- }
1796
- }
1797
- ABSL_TSAN_MUTEX_POST_UNLOCK(this, __tsan_mutex_read_lock);
1798
- }
1799
-
1800
- // Clears the designated waker flag in the mutex if this thread has blocked, and
1801
- // therefore may be the designated waker.
1802
- static intptr_t ClearDesignatedWakerMask(int flag) {
1803
- assert(flag >= 0);
1804
- assert(flag <= 1);
1805
- switch (flag) {
1806
- case 0: // not blocked
1807
- return ~static_cast<intptr_t>(0);
1808
- case 1: // blocked; turn off the designated waker bit
1809
- return ~static_cast<intptr_t>(kMuDesig);
1810
- }
1811
- ABSL_UNREACHABLE();
1812
- }
1813
-
1814
- // Conditionally ignores the existence of waiting writers if a reader that has
1815
- // already blocked once wakes up.
1816
- static intptr_t IgnoreWaitingWritersMask(int flag) {
1817
- assert(flag >= 0);
1818
- assert(flag <= 1);
1819
- switch (flag) {
1820
- case 0: // not blocked
1821
- return ~static_cast<intptr_t>(0);
1822
- case 1: // blocked; pretend there are no waiting writers
1823
- return ~static_cast<intptr_t>(kMuWrWait);
1824
- }
1825
- ABSL_UNREACHABLE();
1826
- }
1827
-
1828
- // Internal version of LockWhen(). See LockSlowWithDeadline()
1829
- ABSL_ATTRIBUTE_NOINLINE void Mutex::LockSlow(MuHow how, const Condition* cond,
1830
- int flags) {
1831
- // Note: we specifically initialize spinloop_iterations after the first use
1832
- // in TryAcquireWithSpinning so that Lock function does not have any non-tail
1833
- // calls and consequently a stack frame. It's fine to have spinloop_iterations
1834
- // uninitialized (meaning no spinning) in all initial uncontended Lock calls
1835
- // and in the first contended call. After that we will have
1836
- // spinloop_iterations properly initialized.
1837
- if (ABSL_PREDICT_FALSE(
1838
- globals.spinloop_iterations.load(std::memory_order_relaxed) == 0)) {
1839
- if (absl::base_internal::NumCPUs() > 1) {
1840
- // If this is multiprocessor, allow spinning.
1841
- globals.spinloop_iterations.store(1500, std::memory_order_relaxed);
1842
- } else {
1843
- // If this a uniprocessor, only yield/sleep.
1844
- globals.spinloop_iterations.store(-1, std::memory_order_relaxed);
1845
- }
1846
- }
1847
- ABSL_RAW_CHECK(
1848
- this->LockSlowWithDeadline(how, cond, KernelTimeout::Never(), flags),
1849
- "condition untrue on return from LockSlow");
1850
- }
1851
-
1852
- // Compute cond->Eval() and tell race detectors that we do it under mutex mu.
1853
- static inline bool EvalConditionAnnotated(const Condition* cond, Mutex* mu,
1854
- bool locking, bool trylock,
1855
- bool read_lock) {
1856
- // Delicate annotation dance.
1857
- // We are currently inside of read/write lock/unlock operation.
1858
- // All memory accesses are ignored inside of mutex operations + for unlock
1859
- // operation tsan considers that we've already released the mutex.
1860
- bool res = false;
1861
- #ifdef ABSL_INTERNAL_HAVE_TSAN_INTERFACE
1862
- const uint32_t flags = read_lock ? __tsan_mutex_read_lock : 0;
1863
- const uint32_t tryflags = flags | (trylock ? __tsan_mutex_try_lock : 0);
1864
- #endif
1865
- if (locking) {
1866
- // For lock we pretend that we have finished the operation,
1867
- // evaluate the predicate, then unlock the mutex and start locking it again
1868
- // to match the annotation at the end of outer lock operation.
1869
- // Note: we can't simply do POST_LOCK, Eval, PRE_LOCK, because then tsan
1870
- // will think the lock acquisition is recursive which will trigger
1871
- // deadlock detector.
1872
- ABSL_TSAN_MUTEX_POST_LOCK(mu, tryflags, 0);
1873
- res = cond->Eval();
1874
- // There is no "try" version of Unlock, so use flags instead of tryflags.
1875
- ABSL_TSAN_MUTEX_PRE_UNLOCK(mu, flags);
1876
- ABSL_TSAN_MUTEX_POST_UNLOCK(mu, flags);
1877
- ABSL_TSAN_MUTEX_PRE_LOCK(mu, tryflags);
1878
- } else {
1879
- // Similarly, for unlock we pretend that we have unlocked the mutex,
1880
- // lock the mutex, evaluate the predicate, and start unlocking it again
1881
- // to match the annotation at the end of outer unlock operation.
1882
- ABSL_TSAN_MUTEX_POST_UNLOCK(mu, flags);
1883
- ABSL_TSAN_MUTEX_PRE_LOCK(mu, flags);
1884
- ABSL_TSAN_MUTEX_POST_LOCK(mu, flags, 0);
1885
- res = cond->Eval();
1886
- ABSL_TSAN_MUTEX_PRE_UNLOCK(mu, flags);
1887
- }
1888
- // Prevent unused param warnings in non-TSAN builds.
1889
- static_cast<void>(mu);
1890
- static_cast<void>(trylock);
1891
- static_cast<void>(read_lock);
1892
- return res;
1893
- }
1894
-
1895
- // Compute cond->Eval() hiding it from race detectors.
1896
- // We are hiding it because inside of UnlockSlow we can evaluate a predicate
1897
- // that was just added by a concurrent Lock operation; Lock adds the predicate
1898
- // to the internal Mutex list without actually acquiring the Mutex
1899
- // (it only acquires the internal spinlock, which is rightfully invisible for
1900
- // tsan). As the result there is no tsan-visible synchronization between the
1901
- // addition and this thread. So if we would enable race detection here,
1902
- // it would race with the predicate initialization.
1903
- static inline bool EvalConditionIgnored(Mutex* mu, const Condition* cond) {
1904
- // Memory accesses are already ignored inside of lock/unlock operations,
1905
- // but synchronization operations are also ignored. When we evaluate the
1906
- // predicate we must ignore only memory accesses but not synchronization,
1907
- // because missed synchronization can lead to false reports later.
1908
- // So we "divert" (which un-ignores both memory accesses and synchronization)
1909
- // and then separately turn on ignores of memory accesses.
1910
- ABSL_TSAN_MUTEX_PRE_DIVERT(mu, 0);
1911
- ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN();
1912
- bool res = cond->Eval();
1913
- ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END();
1914
- ABSL_TSAN_MUTEX_POST_DIVERT(mu, 0);
1915
- static_cast<void>(mu); // Prevent unused param warning in non-TSAN builds.
1916
- return res;
1917
- }
1918
-
1919
- // Internal equivalent of *LockWhenWithDeadline(), where
1920
- // "t" represents the absolute timeout; !t.has_timeout() means "forever".
1921
- // "how" is "kShared" (for ReaderLockWhen) or "kExclusive" (for LockWhen)
1922
- // In flags, bits are ored together:
1923
- // - kMuHasBlocked indicates that the client has already blocked on the call so
1924
- // the designated waker bit must be cleared and waiting writers should not
1925
- // obstruct this call
1926
- // - kMuIsCond indicates that this is a conditional acquire (condition variable,
1927
- // Await, LockWhen) so contention profiling should be suppressed.
1928
- bool Mutex::LockSlowWithDeadline(MuHow how, const Condition* cond,
1929
- KernelTimeout t, int flags) {
1930
- intptr_t v = mu_.load(std::memory_order_relaxed);
1931
- bool unlock = false;
1932
- if ((v & how->fast_need_zero) == 0 && // try fast acquire
1933
- mu_.compare_exchange_strong(
1934
- v,
1935
- (how->fast_or |
1936
- (v & ClearDesignatedWakerMask(flags & kMuHasBlocked))) +
1937
- how->fast_add,
1938
- std::memory_order_acquire, std::memory_order_relaxed)) {
1939
- if (cond == nullptr ||
1940
- EvalConditionAnnotated(cond, this, true, false, how == kShared)) {
1941
- return true;
1942
- }
1943
- unlock = true;
1944
- }
1945
- SynchWaitParams waitp(how, cond, t, nullptr /*no cvmu*/,
1946
- Synch_GetPerThreadAnnotated(this),
1947
- nullptr /*no cv_word*/);
1948
- if (cond != nullptr) {
1949
- flags |= kMuIsCond;
1950
- }
1951
- if (unlock) {
1952
- this->UnlockSlow(&waitp);
1953
- this->Block(waitp.thread);
1954
- flags |= kMuHasBlocked;
1955
- }
1956
- this->LockSlowLoop(&waitp, flags);
1957
- return waitp.cond != nullptr || // => cond known true from LockSlowLoop
1958
- cond == nullptr ||
1959
- EvalConditionAnnotated(cond, this, true, false, how == kShared);
1960
- }
1961
-
1962
- // RAW_CHECK_FMT() takes a condition, a printf-style format string, and
1963
- // the printf-style argument list. The format string must be a literal.
1964
- // Arguments after the first are not evaluated unless the condition is true.
1965
- #define RAW_CHECK_FMT(cond, ...) \
1966
- do { \
1967
- if (ABSL_PREDICT_FALSE(!(cond))) { \
1968
- ABSL_RAW_LOG(FATAL, "Check " #cond " failed: " __VA_ARGS__); \
1969
- } \
1970
- } while (0)
1971
-
1972
- static void CheckForMutexCorruption(intptr_t v, const char* label) {
1973
- // Test for either of two situations that should not occur in v:
1974
- // kMuWriter and kMuReader
1975
- // kMuWrWait and !kMuWait
1976
- const uintptr_t w = static_cast<uintptr_t>(v ^ kMuWait);
1977
- // By flipping that bit, we can now test for:
1978
- // kMuWriter and kMuReader in w
1979
- // kMuWrWait and kMuWait in w
1980
- // We've chosen these two pairs of values to be so that they will overlap,
1981
- // respectively, when the word is left shifted by three. This allows us to
1982
- // save a branch in the common (correct) case of them not being coincident.
1983
- static_assert(kMuReader << 3 == kMuWriter, "must match");
1984
- static_assert(kMuWait << 3 == kMuWrWait, "must match");
1985
- if (ABSL_PREDICT_TRUE((w & (w << 3) & (kMuWriter | kMuWrWait)) == 0)) return;
1986
- RAW_CHECK_FMT((v & (kMuWriter | kMuReader)) != (kMuWriter | kMuReader),
1987
- "%s: Mutex corrupt: both reader and writer lock held: %p",
1988
- label, reinterpret_cast<void*>(v));
1989
- RAW_CHECK_FMT((v & (kMuWait | kMuWrWait)) != kMuWrWait,
1990
- "%s: Mutex corrupt: waiting writer with no waiters: %p", label,
1991
- reinterpret_cast<void*>(v));
1992
- assert(false);
1993
- }
1994
-
1995
- void Mutex::LockSlowLoop(SynchWaitParams* waitp, int flags) {
1996
- SchedulingGuard::ScopedDisable disable_rescheduling;
1997
- int c = 0;
1998
- intptr_t v = mu_.load(std::memory_order_relaxed);
1999
- if ((v & kMuEvent) != 0) {
2000
- PostSynchEvent(
2001
- this, waitp->how == kExclusive ? SYNCH_EV_LOCK : SYNCH_EV_READERLOCK);
2002
- }
2003
- ABSL_RAW_CHECK(
2004
- waitp->thread->waitp == nullptr || waitp->thread->suppress_fatal_errors,
2005
- "detected illegal recursion into Mutex code");
2006
- for (;;) {
2007
- v = mu_.load(std::memory_order_relaxed);
2008
- CheckForMutexCorruption(v, "Lock");
2009
- if ((v & waitp->how->slow_need_zero) == 0) {
2010
- if (mu_.compare_exchange_strong(
2011
- v,
2012
- (waitp->how->fast_or |
2013
- (v & ClearDesignatedWakerMask(flags & kMuHasBlocked))) +
2014
- waitp->how->fast_add,
2015
- std::memory_order_acquire, std::memory_order_relaxed)) {
2016
- if (waitp->cond == nullptr ||
2017
- EvalConditionAnnotated(waitp->cond, this, true, false,
2018
- waitp->how == kShared)) {
2019
- break; // we timed out, or condition true, so return
2020
- }
2021
- this->UnlockSlow(waitp); // got lock but condition false
2022
- this->Block(waitp->thread);
2023
- flags |= kMuHasBlocked;
2024
- c = 0;
2025
- }
2026
- } else { // need to access waiter list
2027
- bool dowait = false;
2028
- if ((v & (kMuSpin | kMuWait)) == 0) { // no waiters
2029
- // This thread tries to become the one and only waiter.
2030
- PerThreadSynch* new_h = Enqueue(nullptr, waitp, v, flags);
2031
- intptr_t nv =
2032
- (v & ClearDesignatedWakerMask(flags & kMuHasBlocked) & kMuLow) |
2033
- kMuWait;
2034
- ABSL_RAW_CHECK(new_h != nullptr, "Enqueue to empty list failed");
2035
- if (waitp->how == kExclusive && (v & kMuReader) != 0) {
2036
- nv |= kMuWrWait;
2037
- }
2038
- if (mu_.compare_exchange_strong(
2039
- v, reinterpret_cast<intptr_t>(new_h) | nv,
2040
- std::memory_order_release, std::memory_order_relaxed)) {
2041
- dowait = true;
2042
- } else { // attempted Enqueue() failed
2043
- // zero out the waitp field set by Enqueue()
2044
- waitp->thread->waitp = nullptr;
2045
- }
2046
- } else if ((v & waitp->how->slow_inc_need_zero &
2047
- IgnoreWaitingWritersMask(flags & kMuHasBlocked)) == 0) {
2048
- // This is a reader that needs to increment the reader count,
2049
- // but the count is currently held in the last waiter.
2050
- if (mu_.compare_exchange_strong(
2051
- v,
2052
- (v & ClearDesignatedWakerMask(flags & kMuHasBlocked)) |
2053
- kMuSpin | kMuReader,
2054
- std::memory_order_acquire, std::memory_order_relaxed)) {
2055
- PerThreadSynch* h = GetPerThreadSynch(v);
2056
- h->readers += kMuOne; // inc reader count in waiter
2057
- do { // release spinlock
2058
- v = mu_.load(std::memory_order_relaxed);
2059
- } while (!mu_.compare_exchange_weak(v, (v & ~kMuSpin) | kMuReader,
2060
- std::memory_order_release,
2061
- std::memory_order_relaxed));
2062
- if (waitp->cond == nullptr ||
2063
- EvalConditionAnnotated(waitp->cond, this, true, false,
2064
- waitp->how == kShared)) {
2065
- break; // we timed out, or condition true, so return
2066
- }
2067
- this->UnlockSlow(waitp); // got lock but condition false
2068
- this->Block(waitp->thread);
2069
- flags |= kMuHasBlocked;
2070
- c = 0;
2071
- }
2072
- } else if ((v & kMuSpin) == 0 && // attempt to queue ourselves
2073
- mu_.compare_exchange_strong(
2074
- v,
2075
- (v & ClearDesignatedWakerMask(flags & kMuHasBlocked)) |
2076
- kMuSpin | kMuWait,
2077
- std::memory_order_acquire, std::memory_order_relaxed)) {
2078
- PerThreadSynch* h = GetPerThreadSynch(v);
2079
- PerThreadSynch* new_h = Enqueue(h, waitp, v, flags);
2080
- intptr_t wr_wait = 0;
2081
- ABSL_RAW_CHECK(new_h != nullptr, "Enqueue to list failed");
2082
- if (waitp->how == kExclusive && (v & kMuReader) != 0) {
2083
- wr_wait = kMuWrWait; // give priority to a waiting writer
2084
- }
2085
- do { // release spinlock
2086
- v = mu_.load(std::memory_order_relaxed);
2087
- } while (!mu_.compare_exchange_weak(
2088
- v,
2089
- (v & (kMuLow & ~kMuSpin)) | kMuWait | wr_wait |
2090
- reinterpret_cast<intptr_t>(new_h),
2091
- std::memory_order_release, std::memory_order_relaxed));
2092
- dowait = true;
2093
- }
2094
- if (dowait) {
2095
- this->Block(waitp->thread); // wait until removed from list or timeout
2096
- flags |= kMuHasBlocked;
2097
- c = 0;
2098
- }
2099
- }
2100
- ABSL_RAW_CHECK(
2101
- waitp->thread->waitp == nullptr || waitp->thread->suppress_fatal_errors,
2102
- "detected illegal recursion into Mutex code");
2103
- // delay, then try again
2104
- c = synchronization_internal::MutexDelay(c, GENTLE);
2105
- }
2106
- ABSL_RAW_CHECK(
2107
- waitp->thread->waitp == nullptr || waitp->thread->suppress_fatal_errors,
2108
- "detected illegal recursion into Mutex code");
2109
- if ((v & kMuEvent) != 0) {
2110
- PostSynchEvent(this, waitp->how == kExclusive
2111
- ? SYNCH_EV_LOCK_RETURNING
2112
- : SYNCH_EV_READERLOCK_RETURNING);
2113
- }
2114
- }
2115
-
2116
- // Unlock this mutex, which is held by the current thread.
2117
- // If waitp is non-zero, it must be the wait parameters for the current thread
2118
- // which holds the lock but is not runnable because its condition is false
2119
- // or it is in the process of blocking on a condition variable; it must requeue
2120
- // itself on the mutex/condvar to wait for its condition to become true.
2121
- ABSL_ATTRIBUTE_NOINLINE void Mutex::UnlockSlow(SynchWaitParams* waitp) {
2122
- SchedulingGuard::ScopedDisable disable_rescheduling;
2123
- intptr_t v = mu_.load(std::memory_order_relaxed);
2124
- this->AssertReaderHeld();
2125
- CheckForMutexCorruption(v, "Unlock");
2126
- if ((v & kMuEvent) != 0) {
2127
- PostSynchEvent(
2128
- this, (v & kMuWriter) != 0 ? SYNCH_EV_UNLOCK : SYNCH_EV_READERUNLOCK);
2129
- }
2130
- int c = 0;
2131
- // the waiter under consideration to wake, or zero
2132
- PerThreadSynch* w = nullptr;
2133
- // the predecessor to w or zero
2134
- PerThreadSynch* pw = nullptr;
2135
- // head of the list searched previously, or zero
2136
- PerThreadSynch* old_h = nullptr;
2137
- // a condition that's known to be false.
2138
- PerThreadSynch* wake_list = kPerThreadSynchNull; // list of threads to wake
2139
- intptr_t wr_wait = 0; // set to kMuWrWait if we wake a reader and a
2140
- // later writer could have acquired the lock
2141
- // (starvation avoidance)
2142
- ABSL_RAW_CHECK(waitp == nullptr || waitp->thread->waitp == nullptr ||
2143
- waitp->thread->suppress_fatal_errors,
2144
- "detected illegal recursion into Mutex code");
2145
- // This loop finds threads wake_list to wakeup if any, and removes them from
2146
- // the list of waiters. In addition, it places waitp.thread on the queue of
2147
- // waiters if waitp is non-zero.
2148
- for (;;) {
2149
- v = mu_.load(std::memory_order_relaxed);
2150
- if ((v & kMuWriter) != 0 && (v & (kMuWait | kMuDesig)) != kMuWait &&
2151
- waitp == nullptr) {
2152
- // fast writer release (writer with no waiters or with designated waker)
2153
- if (mu_.compare_exchange_strong(v, v & ~(kMuWrWait | kMuWriter),
2154
- std::memory_order_release,
2155
- std::memory_order_relaxed)) {
2156
- return;
2157
- }
2158
- } else if ((v & (kMuReader | kMuWait)) == kMuReader && waitp == nullptr) {
2159
- // fast reader release (reader with no waiters)
2160
- intptr_t clear = ExactlyOneReader(v) ? kMuReader | kMuOne : kMuOne;
2161
- if (mu_.compare_exchange_strong(v, v - clear, std::memory_order_release,
2162
- std::memory_order_relaxed)) {
2163
- return;
2164
- }
2165
- } else if ((v & kMuSpin) == 0 && // attempt to get spinlock
2166
- mu_.compare_exchange_strong(v, v | kMuSpin,
2167
- std::memory_order_acquire,
2168
- std::memory_order_relaxed)) {
2169
- if ((v & kMuWait) == 0) { // no one to wake
2170
- intptr_t nv;
2171
- bool do_enqueue = true; // always Enqueue() the first time
2172
- ABSL_RAW_CHECK(waitp != nullptr,
2173
- "UnlockSlow is confused"); // about to sleep
2174
- do { // must loop to release spinlock as reader count may change
2175
- v = mu_.load(std::memory_order_relaxed);
2176
- // decrement reader count if there are readers
2177
- intptr_t new_readers = (v >= kMuOne) ? v - kMuOne : v;
2178
- PerThreadSynch* new_h = nullptr;
2179
- if (do_enqueue) {
2180
- // If we are enqueuing on a CondVar (waitp->cv_word != nullptr) then
2181
- // we must not retry here. The initial attempt will always have
2182
- // succeeded, further attempts would enqueue us against *this due to
2183
- // Fer() handling.
2184
- do_enqueue = (waitp->cv_word == nullptr);
2185
- new_h = Enqueue(nullptr, waitp, new_readers, kMuIsCond);
2186
- }
2187
- intptr_t clear = kMuWrWait | kMuWriter; // by default clear write bit
2188
- if ((v & kMuWriter) == 0 && ExactlyOneReader(v)) { // last reader
2189
- clear = kMuWrWait | kMuReader; // clear read bit
2190
- }
2191
- nv = (v & kMuLow & ~clear & ~kMuSpin);
2192
- if (new_h != nullptr) {
2193
- nv |= kMuWait | reinterpret_cast<intptr_t>(new_h);
2194
- } else { // new_h could be nullptr if we queued ourselves on a
2195
- // CondVar
2196
- // In that case, we must place the reader count back in the mutex
2197
- // word, as Enqueue() did not store it in the new waiter.
2198
- nv |= new_readers & kMuHigh;
2199
- }
2200
- // release spinlock & our lock; retry if reader-count changed
2201
- // (writer count cannot change since we hold lock)
2202
- } while (!mu_.compare_exchange_weak(v, nv, std::memory_order_release,
2203
- std::memory_order_relaxed));
2204
- break;
2205
- }
2206
-
2207
- // There are waiters.
2208
- // Set h to the head of the circular waiter list.
2209
- PerThreadSynch* h = GetPerThreadSynch(v);
2210
- if ((v & kMuReader) != 0 && (h->readers & kMuHigh) > kMuOne) {
2211
- // a reader but not the last
2212
- h->readers -= kMuOne; // release our lock
2213
- intptr_t nv = v; // normally just release spinlock
2214
- if (waitp != nullptr) { // but waitp!=nullptr => must queue ourselves
2215
- PerThreadSynch* new_h = Enqueue(h, waitp, v, kMuIsCond);
2216
- ABSL_RAW_CHECK(new_h != nullptr,
2217
- "waiters disappeared during Enqueue()!");
2218
- nv &= kMuLow;
2219
- nv |= kMuWait | reinterpret_cast<intptr_t>(new_h);
2220
- }
2221
- mu_.store(nv, std::memory_order_release); // release spinlock
2222
- // can release with a store because there were waiters
2223
- break;
2224
- }
2225
-
2226
- // Either we didn't search before, or we marked the queue
2227
- // as "maybe_unlocking" and no one else should have changed it.
2228
- ABSL_RAW_CHECK(old_h == nullptr || h->maybe_unlocking,
2229
- "Mutex queue changed beneath us");
2230
-
2231
- // The lock is becoming free, and there's a waiter
2232
- if (old_h != nullptr &&
2233
- !old_h->may_skip) { // we used old_h as a terminator
2234
- old_h->may_skip = true; // allow old_h to skip once more
2235
- ABSL_RAW_CHECK(old_h->skip == nullptr, "illegal skip from head");
2236
- if (h != old_h && MuEquivalentWaiter(old_h, old_h->next)) {
2237
- old_h->skip = old_h->next; // old_h not head & can skip to successor
2238
- }
2239
- }
2240
- if (h->next->waitp->how == kExclusive &&
2241
- h->next->waitp->cond == nullptr) {
2242
- // easy case: writer with no condition; no need to search
2243
- pw = h; // wake w, the successor of h (=pw)
2244
- w = h->next;
2245
- w->wake = true;
2246
- // We are waking up a writer. This writer may be racing against
2247
- // an already awake reader for the lock. We want the
2248
- // writer to usually win this race,
2249
- // because if it doesn't, we can potentially keep taking a reader
2250
- // perpetually and writers will starve. Worse than
2251
- // that, this can also starve other readers if kMuWrWait gets set
2252
- // later.
2253
- wr_wait = kMuWrWait;
2254
- } else if (w != nullptr && (w->waitp->how == kExclusive || h == old_h)) {
2255
- // we found a waiter w to wake on a previous iteration and either it's
2256
- // a writer, or we've searched the entire list so we have all the
2257
- // readers.
2258
- if (pw == nullptr) { // if w's predecessor is unknown, it must be h
2259
- pw = h;
2260
- }
2261
- } else {
2262
- // At this point we don't know all the waiters to wake, and the first
2263
- // waiter has a condition or is a reader. We avoid searching over
2264
- // waiters we've searched on previous iterations by starting at
2265
- // old_h if it's set. If old_h==h, there's no one to wakeup at all.
2266
- if (old_h == h) { // we've searched before, and nothing's new
2267
- // so there's no one to wake.
2268
- intptr_t nv = (v & ~(kMuReader | kMuWriter | kMuWrWait));
2269
- h->readers = 0;
2270
- h->maybe_unlocking = false; // finished unlocking
2271
- if (waitp != nullptr) { // we must queue ourselves and sleep
2272
- PerThreadSynch* new_h = Enqueue(h, waitp, v, kMuIsCond);
2273
- nv &= kMuLow;
2274
- if (new_h != nullptr) {
2275
- nv |= kMuWait | reinterpret_cast<intptr_t>(new_h);
2276
- } // else new_h could be nullptr if we queued ourselves on a
2277
- // CondVar
2278
- }
2279
- // release spinlock & lock
2280
- // can release with a store because there were waiters
2281
- mu_.store(nv, std::memory_order_release);
2282
- break;
2283
- }
2284
-
2285
- // set up to walk the list
2286
- PerThreadSynch* w_walk; // current waiter during list walk
2287
- PerThreadSynch* pw_walk; // previous waiter during list walk
2288
- if (old_h != nullptr) { // we've searched up to old_h before
2289
- pw_walk = old_h;
2290
- w_walk = old_h->next;
2291
- } else { // no prior search, start at beginning
2292
- pw_walk =
2293
- nullptr; // h->next's predecessor may change; don't record it
2294
- w_walk = h->next;
2295
- }
2296
-
2297
- h->may_skip = false; // ensure we never skip past h in future searches
2298
- // even if other waiters are queued after it.
2299
- ABSL_RAW_CHECK(h->skip == nullptr, "illegal skip from head");
2300
-
2301
- h->maybe_unlocking = true; // we're about to scan the waiter list
2302
- // without the spinlock held.
2303
- // Enqueue must be conservative about
2304
- // priority queuing.
2305
-
2306
- // We must release the spinlock to evaluate the conditions.
2307
- mu_.store(v, std::memory_order_release); // release just spinlock
2308
- // can release with a store because there were waiters
2309
-
2310
- // h is the last waiter queued, and w_walk the first unsearched waiter.
2311
- // Without the spinlock, the locations mu_ and h->next may now change
2312
- // underneath us, but since we hold the lock itself, the only legal
2313
- // change is to add waiters between h and w_walk. Therefore, it's safe
2314
- // to walk the path from w_walk to h inclusive. (TryRemove() can remove
2315
- // a waiter anywhere, but it acquires both the spinlock and the Mutex)
2316
-
2317
- old_h = h; // remember we searched to here
2318
-
2319
- // Walk the path upto and including h looking for waiters we can wake.
2320
- while (pw_walk != h) {
2321
- w_walk->wake = false;
2322
- if (w_walk->waitp->cond ==
2323
- nullptr || // no condition => vacuously true OR
2324
- // this thread's condition is true
2325
- EvalConditionIgnored(this, w_walk->waitp->cond)) {
2326
- if (w == nullptr) {
2327
- w_walk->wake = true; // can wake this waiter
2328
- w = w_walk;
2329
- pw = pw_walk;
2330
- if (w_walk->waitp->how == kExclusive) {
2331
- wr_wait = kMuWrWait;
2332
- break; // bail if waking this writer
2333
- }
2334
- } else if (w_walk->waitp->how == kShared) { // wake if a reader
2335
- w_walk->wake = true;
2336
- } else { // writer with true condition
2337
- wr_wait = kMuWrWait;
2338
- }
2339
- }
2340
- if (w_walk->wake) { // we're waking reader w_walk
2341
- pw_walk = w_walk; // don't skip similar waiters
2342
- } else { // not waking; skip as much as possible
2343
- pw_walk = Skip(w_walk);
2344
- }
2345
- // If pw_walk == h, then load of pw_walk->next can race with
2346
- // concurrent write in Enqueue(). However, at the same time
2347
- // we do not need to do the load, because we will bail out
2348
- // from the loop anyway.
2349
- if (pw_walk != h) {
2350
- w_walk = pw_walk->next;
2351
- }
2352
- }
2353
-
2354
- continue; // restart for(;;)-loop to wakeup w or to find more waiters
2355
- }
2356
- ABSL_RAW_CHECK(pw->next == w, "pw not w's predecessor");
2357
- // The first (and perhaps only) waiter we've chosen to wake is w, whose
2358
- // predecessor is pw. If w is a reader, we must wake all the other
2359
- // waiters with wake==true as well. We may also need to queue
2360
- // ourselves if waitp != null. The spinlock and the lock are still
2361
- // held.
2362
-
2363
- // This traverses the list in [ pw->next, h ], where h is the head,
2364
- // removing all elements with wake==true and placing them in the
2365
- // singly-linked list wake_list. Returns the new head.
2366
- h = DequeueAllWakeable(h, pw, &wake_list);
2367
-
2368
- intptr_t nv = (v & kMuEvent) | kMuDesig;
2369
- // assume no waiters left,
2370
- // set kMuDesig for INV1a
2371
-
2372
- if (waitp != nullptr) { // we must queue ourselves and sleep
2373
- h = Enqueue(h, waitp, v, kMuIsCond);
2374
- // h is new last waiter; could be null if we queued ourselves on a
2375
- // CondVar
2376
- }
2377
-
2378
- ABSL_RAW_CHECK(wake_list != kPerThreadSynchNull,
2379
- "unexpected empty wake list");
2380
-
2381
- if (h != nullptr) { // there are waiters left
2382
- h->readers = 0;
2383
- h->maybe_unlocking = false; // finished unlocking
2384
- nv |= wr_wait | kMuWait | reinterpret_cast<intptr_t>(h);
2385
- }
2386
-
2387
- // release both spinlock & lock
2388
- // can release with a store because there were waiters
2389
- mu_.store(nv, std::memory_order_release);
2390
- break; // out of for(;;)-loop
2391
- }
2392
- // aggressive here; no one can proceed till we do
2393
- c = synchronization_internal::MutexDelay(c, AGGRESSIVE);
2394
- } // end of for(;;)-loop
2395
-
2396
- if (wake_list != kPerThreadSynchNull) {
2397
- int64_t total_wait_cycles = 0;
2398
- int64_t max_wait_cycles = 0;
2399
- int64_t now = CycleClock::Now();
2400
- do {
2401
- // Profile lock contention events only if the waiter was trying to acquire
2402
- // the lock, not waiting on a condition variable or Condition.
2403
- if (!wake_list->cond_waiter) {
2404
- int64_t cycles_waited =
2405
- (now - wake_list->waitp->contention_start_cycles);
2406
- total_wait_cycles += cycles_waited;
2407
- if (max_wait_cycles == 0) max_wait_cycles = cycles_waited;
2408
- wake_list->waitp->contention_start_cycles = now;
2409
- wake_list->waitp->should_submit_contention_data = true;
2410
- }
2411
- wake_list = Wakeup(wake_list); // wake waiters
2412
- } while (wake_list != kPerThreadSynchNull);
2413
- if (total_wait_cycles > 0) {
2414
- mutex_tracer("slow release", this, total_wait_cycles);
2415
- ABSL_TSAN_MUTEX_PRE_DIVERT(this, 0);
2416
- submit_profile_data(total_wait_cycles);
2417
- ABSL_TSAN_MUTEX_POST_DIVERT(this, 0);
2418
- }
2419
- }
2420
- }
2421
-
2422
- // Used by CondVar implementation to reacquire mutex after waking from
2423
- // condition variable. This routine is used instead of Lock() because the
2424
- // waiting thread may have been moved from the condition variable queue to the
2425
- // mutex queue without a wakeup, by Trans(). In that case, when the thread is
2426
- // finally woken, the woken thread will believe it has been woken from the
2427
- // condition variable (i.e. its PC will be in when in the CondVar code), when
2428
- // in fact it has just been woken from the mutex. Thus, it must enter the slow
2429
- // path of the mutex in the same state as if it had just woken from the mutex.
2430
- // That is, it must ensure to clear kMuDesig (INV1b).
2431
- void Mutex::Trans(MuHow how) {
2432
- this->LockSlow(how, nullptr, kMuHasBlocked | kMuIsCond);
2433
- }
2434
-
2435
- // Used by CondVar implementation to effectively wake thread w from the
2436
- // condition variable. If this mutex is free, we simply wake the thread.
2437
- // It will later acquire the mutex with high probability. Otherwise, we
2438
- // enqueue thread w on this mutex.
2439
- void Mutex::Fer(PerThreadSynch* w) {
2440
- SchedulingGuard::ScopedDisable disable_rescheduling;
2441
- int c = 0;
2442
- ABSL_RAW_CHECK(w->waitp->cond == nullptr,
2443
- "Mutex::Fer while waiting on Condition");
2444
- ABSL_RAW_CHECK(w->waitp->cv_word == nullptr,
2445
- "Mutex::Fer with pending CondVar queueing");
2446
- // The CondVar timeout is not relevant for the Mutex wait.
2447
- w->waitp->timeout = {};
2448
- for (;;) {
2449
- intptr_t v = mu_.load(std::memory_order_relaxed);
2450
- // Note: must not queue if the mutex is unlocked (nobody will wake it).
2451
- // For example, we can have only kMuWait (conditional) or maybe
2452
- // kMuWait|kMuWrWait.
2453
- // conflicting != 0 implies that the waking thread cannot currently take
2454
- // the mutex, which in turn implies that someone else has it and can wake
2455
- // us if we queue.
2456
- const intptr_t conflicting =
2457
- kMuWriter | (w->waitp->how == kShared ? 0 : kMuReader);
2458
- if ((v & conflicting) == 0) {
2459
- w->next = nullptr;
2460
- w->state.store(PerThreadSynch::kAvailable, std::memory_order_release);
2461
- IncrementSynchSem(this, w);
2462
- return;
2463
- } else {
2464
- if ((v & (kMuSpin | kMuWait)) == 0) { // no waiters
2465
- // This thread tries to become the one and only waiter.
2466
- PerThreadSynch* new_h =
2467
- Enqueue(nullptr, w->waitp, v, kMuIsCond | kMuIsFer);
2468
- ABSL_RAW_CHECK(new_h != nullptr,
2469
- "Enqueue failed"); // we must queue ourselves
2470
- if (mu_.compare_exchange_strong(
2471
- v, reinterpret_cast<intptr_t>(new_h) | (v & kMuLow) | kMuWait,
2472
- std::memory_order_release, std::memory_order_relaxed)) {
2473
- return;
2474
- }
2475
- } else if ((v & kMuSpin) == 0 &&
2476
- mu_.compare_exchange_strong(v, v | kMuSpin | kMuWait)) {
2477
- PerThreadSynch* h = GetPerThreadSynch(v);
2478
- PerThreadSynch* new_h = Enqueue(h, w->waitp, v, kMuIsCond | kMuIsFer);
2479
- ABSL_RAW_CHECK(new_h != nullptr,
2480
- "Enqueue failed"); // we must queue ourselves
2481
- do {
2482
- v = mu_.load(std::memory_order_relaxed);
2483
- } while (!mu_.compare_exchange_weak(
2484
- v,
2485
- (v & kMuLow & ~kMuSpin) | kMuWait |
2486
- reinterpret_cast<intptr_t>(new_h),
2487
- std::memory_order_release, std::memory_order_relaxed));
2488
- return;
2489
- }
2490
- }
2491
- c = synchronization_internal::MutexDelay(c, GENTLE);
2492
- }
2493
- }
2494
-
2495
- void Mutex::AssertHeld() const {
2496
- if ((mu_.load(std::memory_order_relaxed) & kMuWriter) == 0) {
2497
- SynchEvent* e = GetSynchEvent(this);
2498
- ABSL_RAW_LOG(FATAL, "thread should hold write lock on Mutex %p %s",
2499
- static_cast<const void*>(this), (e == nullptr ? "" : e->name));
2500
- }
2501
- }
2502
-
2503
- void Mutex::AssertReaderHeld() const {
2504
- if ((mu_.load(std::memory_order_relaxed) & (kMuReader | kMuWriter)) == 0) {
2505
- SynchEvent* e = GetSynchEvent(this);
2506
- ABSL_RAW_LOG(FATAL,
2507
- "thread should hold at least a read lock on Mutex %p %s",
2508
- static_cast<const void*>(this), (e == nullptr ? "" : e->name));
2509
- }
2510
- }
2511
-
2512
- // -------------------------------- condition variables
2513
- static const intptr_t kCvSpin = 0x0001L; // spinlock protects waiter list
2514
- static const intptr_t kCvEvent = 0x0002L; // record events
2515
-
2516
- static const intptr_t kCvLow = 0x0003L; // low order bits of CV
2517
-
2518
- // Hack to make constant values available to gdb pretty printer
2519
- enum {
2520
- kGdbCvSpin = kCvSpin,
2521
- kGdbCvEvent = kCvEvent,
2522
- kGdbCvLow = kCvLow,
2523
- };
2524
-
2525
- static_assert(PerThreadSynch::kAlignment > kCvLow,
2526
- "PerThreadSynch::kAlignment must be greater than kCvLow");
2527
-
2528
- void CondVar::EnableDebugLog(const char* name) {
2529
- SynchEvent* e = EnsureSynchEvent(&this->cv_, name, kCvEvent, kCvSpin);
2530
- e->log = true;
2531
- UnrefSynchEvent(e);
2532
- }
2533
-
2534
- // Remove thread s from the list of waiters on this condition variable.
2535
- void CondVar::Remove(PerThreadSynch* s) {
2536
- SchedulingGuard::ScopedDisable disable_rescheduling;
2537
- intptr_t v;
2538
- int c = 0;
2539
- for (v = cv_.load(std::memory_order_relaxed);;
2540
- v = cv_.load(std::memory_order_relaxed)) {
2541
- if ((v & kCvSpin) == 0 && // attempt to acquire spinlock
2542
- cv_.compare_exchange_strong(v, v | kCvSpin, std::memory_order_acquire,
2543
- std::memory_order_relaxed)) {
2544
- PerThreadSynch* h = reinterpret_cast<PerThreadSynch*>(v & ~kCvLow);
2545
- if (h != nullptr) {
2546
- PerThreadSynch* w = h;
2547
- while (w->next != s && w->next != h) { // search for thread
2548
- w = w->next;
2549
- }
2550
- if (w->next == s) { // found thread; remove it
2551
- w->next = s->next;
2552
- if (h == s) {
2553
- h = (w == s) ? nullptr : w;
2554
- }
2555
- s->next = nullptr;
2556
- s->state.store(PerThreadSynch::kAvailable, std::memory_order_release);
2557
- }
2558
- }
2559
- // release spinlock
2560
- cv_.store((v & kCvEvent) | reinterpret_cast<intptr_t>(h),
2561
- std::memory_order_release);
2562
- return;
2563
- } else {
2564
- // try again after a delay
2565
- c = synchronization_internal::MutexDelay(c, GENTLE);
2566
- }
2567
- }
2568
- }
2569
-
2570
- // Queue thread waitp->thread on condition variable word cv_word using
2571
- // wait parameters waitp.
2572
- // We split this into a separate routine, rather than simply doing it as part
2573
- // of WaitCommon(). If we were to queue ourselves on the condition variable
2574
- // before calling Mutex::UnlockSlow(), the Mutex code might be re-entered (via
2575
- // the logging code, or via a Condition function) and might potentially attempt
2576
- // to block this thread. That would be a problem if the thread were already on
2577
- // a condition variable waiter queue. Thus, we use the waitp->cv_word to tell
2578
- // the unlock code to call CondVarEnqueue() to queue the thread on the condition
2579
- // variable queue just before the mutex is to be unlocked, and (most
2580
- // importantly) after any call to an external routine that might re-enter the
2581
- // mutex code.
2582
- static void CondVarEnqueue(SynchWaitParams* waitp) {
2583
- // This thread might be transferred to the Mutex queue by Fer() when
2584
- // we are woken. To make sure that is what happens, Enqueue() doesn't
2585
- // call CondVarEnqueue() again but instead uses its normal code. We
2586
- // must do this before we queue ourselves so that cv_word will be null
2587
- // when seen by the dequeuer, who may wish immediately to requeue
2588
- // this thread on another queue.
2589
- std::atomic<intptr_t>* cv_word = waitp->cv_word;
2590
- waitp->cv_word = nullptr;
2591
-
2592
- intptr_t v = cv_word->load(std::memory_order_relaxed);
2593
- int c = 0;
2594
- while ((v & kCvSpin) != 0 || // acquire spinlock
2595
- !cv_word->compare_exchange_weak(v, v | kCvSpin,
2596
- std::memory_order_acquire,
2597
- std::memory_order_relaxed)) {
2598
- c = synchronization_internal::MutexDelay(c, GENTLE);
2599
- v = cv_word->load(std::memory_order_relaxed);
2600
- }
2601
- ABSL_RAW_CHECK(waitp->thread->waitp == nullptr, "waiting when shouldn't be");
2602
- waitp->thread->waitp = waitp; // prepare ourselves for waiting
2603
- PerThreadSynch* h = reinterpret_cast<PerThreadSynch*>(v & ~kCvLow);
2604
- if (h == nullptr) { // add this thread to waiter list
2605
- waitp->thread->next = waitp->thread;
2606
- } else {
2607
- waitp->thread->next = h->next;
2608
- h->next = waitp->thread;
2609
- }
2610
- waitp->thread->state.store(PerThreadSynch::kQueued,
2611
- std::memory_order_relaxed);
2612
- cv_word->store((v & kCvEvent) | reinterpret_cast<intptr_t>(waitp->thread),
2613
- std::memory_order_release);
2614
- }
2615
-
2616
- bool CondVar::WaitCommon(Mutex* mutex, KernelTimeout t) {
2617
- bool rc = false; // return value; true iff we timed-out
2618
-
2619
- intptr_t mutex_v = mutex->mu_.load(std::memory_order_relaxed);
2620
- Mutex::MuHow mutex_how = ((mutex_v & kMuWriter) != 0) ? kExclusive : kShared;
2621
- ABSL_TSAN_MUTEX_PRE_UNLOCK(mutex, TsanFlags(mutex_how));
2622
-
2623
- // maybe trace this call
2624
- intptr_t v = cv_.load(std::memory_order_relaxed);
2625
- cond_var_tracer("Wait", this);
2626
- if ((v & kCvEvent) != 0) {
2627
- PostSynchEvent(this, SYNCH_EV_WAIT);
2628
- }
2629
-
2630
- // Release mu and wait on condition variable.
2631
- SynchWaitParams waitp(mutex_how, nullptr, t, mutex,
2632
- Synch_GetPerThreadAnnotated(mutex), &cv_);
2633
- // UnlockSlow() will call CondVarEnqueue() just before releasing the
2634
- // Mutex, thus queuing this thread on the condition variable. See
2635
- // CondVarEnqueue() for the reasons.
2636
- mutex->UnlockSlow(&waitp);
2637
-
2638
- // wait for signal
2639
- while (waitp.thread->state.load(std::memory_order_acquire) ==
2640
- PerThreadSynch::kQueued) {
2641
- if (!Mutex::DecrementSynchSem(mutex, waitp.thread, t)) {
2642
- // DecrementSynchSem returned due to timeout.
2643
- // Now we will either (1) remove ourselves from the wait list in Remove
2644
- // below, in which case Remove will set thread.state = kAvailable and
2645
- // we will not call DecrementSynchSem again; or (2) Signal/SignalAll
2646
- // has removed us concurrently and is calling Wakeup, which will set
2647
- // thread.state = kAvailable and post to the semaphore.
2648
- // It's important to reset the timeout for the case (2) because otherwise
2649
- // we can live-lock in this loop since DecrementSynchSem will always
2650
- // return immediately due to timeout, but Signal/SignalAll is not
2651
- // necessary set thread.state = kAvailable yet (and is not scheduled
2652
- // due to thread priorities or other scheduler artifacts).
2653
- // Note this could also be resolved if Signal/SignalAll would set
2654
- // thread.state = kAvailable while holding the wait list spin lock.
2655
- // But this can't be easily done for SignalAll since it grabs the whole
2656
- // wait list with a single compare-exchange and does not really grab
2657
- // the spin lock.
2658
- t = KernelTimeout::Never();
2659
- this->Remove(waitp.thread);
2660
- rc = true;
2661
- }
2662
- }
2663
-
2664
- ABSL_RAW_CHECK(waitp.thread->waitp != nullptr, "not waiting when should be");
2665
- waitp.thread->waitp = nullptr; // cleanup
2666
-
2667
- // maybe trace this call
2668
- cond_var_tracer("Unwait", this);
2669
- if ((v & kCvEvent) != 0) {
2670
- PostSynchEvent(this, SYNCH_EV_WAIT_RETURNING);
2671
- }
2672
-
2673
- // From synchronization point of view Wait is unlock of the mutex followed
2674
- // by lock of the mutex. We've annotated start of unlock in the beginning
2675
- // of the function. Now, finish unlock and annotate lock of the mutex.
2676
- // (Trans is effectively lock).
2677
- ABSL_TSAN_MUTEX_POST_UNLOCK(mutex, TsanFlags(mutex_how));
2678
- ABSL_TSAN_MUTEX_PRE_LOCK(mutex, TsanFlags(mutex_how));
2679
- mutex->Trans(mutex_how); // Reacquire mutex
2680
- ABSL_TSAN_MUTEX_POST_LOCK(mutex, TsanFlags(mutex_how), 0);
2681
- return rc;
2682
- }
2683
-
2684
- void CondVar::Signal() {
2685
- SchedulingGuard::ScopedDisable disable_rescheduling;
2686
- ABSL_TSAN_MUTEX_PRE_SIGNAL(nullptr, 0);
2687
- intptr_t v;
2688
- int c = 0;
2689
- for (v = cv_.load(std::memory_order_relaxed); v != 0;
2690
- v = cv_.load(std::memory_order_relaxed)) {
2691
- if ((v & kCvSpin) == 0 && // attempt to acquire spinlock
2692
- cv_.compare_exchange_strong(v, v | kCvSpin, std::memory_order_acquire,
2693
- std::memory_order_relaxed)) {
2694
- PerThreadSynch* h = reinterpret_cast<PerThreadSynch*>(v & ~kCvLow);
2695
- PerThreadSynch* w = nullptr;
2696
- if (h != nullptr) { // remove first waiter
2697
- w = h->next;
2698
- if (w == h) {
2699
- h = nullptr;
2700
- } else {
2701
- h->next = w->next;
2702
- }
2703
- }
2704
- // release spinlock
2705
- cv_.store((v & kCvEvent) | reinterpret_cast<intptr_t>(h),
2706
- std::memory_order_release);
2707
- if (w != nullptr) {
2708
- w->waitp->cvmu->Fer(w); // wake waiter, if there was one
2709
- cond_var_tracer("Signal wakeup", this);
2710
- }
2711
- if ((v & kCvEvent) != 0) {
2712
- PostSynchEvent(this, SYNCH_EV_SIGNAL);
2713
- }
2714
- ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
2715
- return;
2716
- } else {
2717
- c = synchronization_internal::MutexDelay(c, GENTLE);
2718
- }
2719
- }
2720
- ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
2721
- }
2722
-
2723
- void CondVar::SignalAll() {
2724
- ABSL_TSAN_MUTEX_PRE_SIGNAL(nullptr, 0);
2725
- intptr_t v;
2726
- int c = 0;
2727
- for (v = cv_.load(std::memory_order_relaxed); v != 0;
2728
- v = cv_.load(std::memory_order_relaxed)) {
2729
- // empty the list if spinlock free
2730
- // We do this by simply setting the list to empty using
2731
- // compare and swap. We then have the entire list in our hands,
2732
- // which cannot be changing since we grabbed it while no one
2733
- // held the lock.
2734
- if ((v & kCvSpin) == 0 &&
2735
- cv_.compare_exchange_strong(v, v & kCvEvent, std::memory_order_acquire,
2736
- std::memory_order_relaxed)) {
2737
- PerThreadSynch* h = reinterpret_cast<PerThreadSynch*>(v & ~kCvLow);
2738
- if (h != nullptr) {
2739
- PerThreadSynch* w;
2740
- PerThreadSynch* n = h->next;
2741
- do { // for every thread, wake it up
2742
- w = n;
2743
- n = n->next;
2744
- w->waitp->cvmu->Fer(w);
2745
- } while (w != h);
2746
- cond_var_tracer("SignalAll wakeup", this);
2747
- }
2748
- if ((v & kCvEvent) != 0) {
2749
- PostSynchEvent(this, SYNCH_EV_SIGNALALL);
2750
- }
2751
- ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
2752
- return;
2753
- } else {
2754
- // try again after a delay
2755
- c = synchronization_internal::MutexDelay(c, GENTLE);
2756
- }
2757
- }
2758
- ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
2759
- }
2760
-
2761
- void ReleasableMutexLock::Release() {
2762
- ABSL_RAW_CHECK(this->mu_ != nullptr,
2763
- "ReleasableMutexLock::Release may only be called once");
2764
- this->mu_->unlock();
2765
- this->mu_ = nullptr;
2766
- }
2767
-
2768
- #ifdef ABSL_HAVE_THREAD_SANITIZER
2769
- extern "C" void __tsan_read1(void* addr);
2770
- #else
2771
- #define __tsan_read1(addr) // do nothing if TSan not enabled
2772
- #endif
2773
-
2774
- // A function that just returns its argument, dereferenced
2775
- static bool Dereference(void* arg) {
2776
- // ThreadSanitizer does not instrument this file for memory accesses.
2777
- // This function dereferences a user variable that can participate
2778
- // in a data race, so we need to manually tell TSan about this memory access.
2779
- __tsan_read1(arg);
2780
- return *(static_cast<bool*>(arg));
2781
- }
2782
-
2783
- ABSL_CONST_INIT const Condition Condition::kTrue;
2784
-
2785
- Condition::Condition(bool (*func)(void*), void* arg)
2786
- : eval_(&CallVoidPtrFunction), arg_(arg) {
2787
- static_assert(sizeof(&func) <= sizeof(callback_),
2788
- "An overlarge function pointer passed to Condition.");
2789
- StoreCallback(func);
2790
- }
2791
-
2792
- bool Condition::CallVoidPtrFunction(const Condition* c) {
2793
- using FunctionPointer = bool (*)(void*);
2794
- FunctionPointer function_pointer;
2795
- std::memcpy(&function_pointer, c->callback_, sizeof(function_pointer));
2796
- return (*function_pointer)(c->arg_);
2797
- }
2798
-
2799
- Condition::Condition(const bool* cond)
2800
- : eval_(CallVoidPtrFunction),
2801
- // const_cast is safe since Dereference does not modify arg
2802
- arg_(const_cast<bool*>(cond)) {
2803
- using FunctionPointer = bool (*)(void*);
2804
- const FunctionPointer dereference = Dereference;
2805
- StoreCallback(dereference);
2806
- }
2807
-
2808
- bool Condition::Eval() const { return (*this->eval_)(this); }
2809
-
2810
- bool Condition::GuaranteedEqual(const Condition* a, const Condition* b) {
2811
- if (a == nullptr || b == nullptr) {
2812
- return a == b;
2813
- }
2814
- // Check equality of the representative fields.
2815
- return a->eval_ == b->eval_ && a->arg_ == b->arg_ &&
2816
- !memcmp(a->callback_, b->callback_, sizeof(a->callback_));
2817
- }
2818
-
2819
- ABSL_NAMESPACE_END
2820
- } // namespace absl