summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/CHANGELOG.md473
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/COPYING49
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Gemfile23
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE24
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE.SPECS22
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/README.md137
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Rakefile206
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/ffi.gemspec42
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.5/ffi_c.bundlebin0 -> 265961 bytes
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.6/ffi_c.bundlebin0 -> 266009 bytes
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.7/ffi_c.bundlebin0 -> 286681 bytes
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.0/ffi_c.bundlebin0 -> 331001 bytes
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.1/ffi_c.bundlebin0 -> 265433 bytes
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.2/ffi_c.bundlebin0 -> 265433 bytes
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.3/ffi_c.bundlebin0 -> 264889 bytes
-rwxr-xr-xvendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.4/ffi_c.bundlebin0 -> 264953 bytes
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi.rb27
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/abstract_memory.rb44
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/autopointer.rb180
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/buffer.rb4
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/callback.rb4
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/compat.rb43
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/data_converter.rb67
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/dynamic_library.rb118
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/enum.rb302
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/errno.rb43
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/ffi.rb109
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/function.rb71
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/io.rb62
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library.rb576
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library_path.rb109
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/managedstruct.rb84
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/memorypointer.rb1
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform.rb187
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-darwin/types.conf130
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd/types.conf128
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd12/types.conf181
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-linux/types.conf175
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-openbsd/types.conf134
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-windows/types.conf52
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd/types.conf152
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd12/types.conf152
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-linux/types.conf132
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa1.1-linux/types.conf178
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa2.0-linux/types.conf178
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-cygwin/types.conf3
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-darwin/types.conf100
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd/types.conf152
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd12/types.conf152
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-gnu/types.conf107
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-linux/types.conf103
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-netbsd/types.conf126
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-openbsd/types.conf128
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-solaris/types.conf122
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-windows/types.conf52
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/ia64-linux/types.conf104
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/loongarch64-linux/types.conf141
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64-linux/types.conf104
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64el-linux/types.conf104
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsel-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6el-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6-linux/types.conf104
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6el-linux/types.conf104
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-aix/types.conf180
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-darwin/types.conf100
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-linux/types.conf130
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-openbsd/types.conf156
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64-linux/types.conf104
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64le-linux/types.conf100
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/riscv64-linux/types.conf104
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390x-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-solaris/types.conf128
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-linux/types.conf102
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-openbsd/types.conf156
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-solaris/types.conf128
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sw_64-linux/types.conf141
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-cygwin/types.conf3
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-darwin/types.conf130
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-dragonflybsd/types.conf130
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd/types.conf128
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd12/types.conf158
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-haiku/types.conf117
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-linux/types.conf132
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-msys/types.conf119
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-netbsd/types.conf128
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-openbsd/types.conf134
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-solaris/types.conf122
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-windows/types.conf52
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/pointer.rb167
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct.rb317
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_by_reference.rb72
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout.rb96
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout_builder.rb227
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/const_generator.rb232
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator.rb105
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator_task.rb32
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/struct_generator.rb195
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/types_generator.rb137
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/types.rb222
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/union.rb43
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/variadic.rb80
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/version.rb3
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/rakelib/ffi_gem_helper.rb65
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getlogin.rb8
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getpid.rb8
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/gettimeofday.rb18
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello.rb8
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello_ractor.rb11
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/inotify.rb60
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/pty.rb75
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort.rb20
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort_ractor.rb28
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi.rbs26
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/abstract_memory.rbs165
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/auto_pointer.rbs26
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/buffer.rbs18
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/data_converter.rbs10
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/dynamic_library.rbs9
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/enum.rbs38
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/function.rbs39
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/library.rbs42
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/native_type.rbs86
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/pointer.rbs42
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct.rbs76
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_reference.rbs11
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_value.rbs7
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout.rbs9
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout_builder.rbs5
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/type.rbs39
133 files changed, 12778 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/CHANGELOG.md b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/CHANGELOG.md
new file mode 100644
index 0000000..5358f8d
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/CHANGELOG.md
@@ -0,0 +1,473 @@
+1.17.2 / 2025-04-15
+-------------------
+
+Fixed:
+* #1144, #1145 Update libffi to 3.4.8 to fix installation issues on latest Macos on ARM64
+* Various adjustments to run the specs cleanly on Ruby-3.5 master branch.
+
+
+1.17.1 / 2024-12-30
+-------------------
+
+Fixed:
+* #1117 Restart async callback dispatcher thread after fork.
+* #1133 Add ruby-3.4 native gem.
+* #1134 Fix FFI::DataConverter non-generic usage in RBS files.
+
+
+1.17.0 / 2024-06-02
+-------------------
+
+Fixed:
+* Add FFI::AbstractMemory#read_array_of_string . It was defined but not exposed to Ruby nor tested. #1070
+
+
+1.17.0.rc2 / 2024-04-22
+-------------------
+
+Fixed:
+* Add missing write barriers to StructLayout#initialize causing a segfault with GC.stress. #1079
+
+
+1.17.0.rc1 / 2024-04-08
+-------------------
+
+Fixed:
+* Fix type definitions on `aarch64-linux`. #1067, #1066
+* Use RB_TEST for `Pointer.autorelease=` . #1065
+ So that `false` and `nil` are treated as falsey and anything else as truthy.
+* Replace Fixnum by Integer. #1064
+ Fixnum is no longer present in the ruby language.
+* Update `FFI::NativeType` doc. #1061
+* Store FFI::Type::Mapped of FFI::StrPtrConverter in global instead of custom type map
+* Various documentation fixes. #1042
+* Update `FFI::Pointer#==` to return `false` if a pointer is compared to a non-pointer object, which is the expected behavior. #1083
+* Avoid warning about undefined wariable `@ffi_functions` #1085
+* Fix a very unlikely GC bug when using a callback block. # 1089
+
+Added:
+* Provide binary gems for many platforms. #990
+* Add Windows fat binary gem for Ruby-3.3
+* Add RBS type definitions for many user facing parts of the FFI API. #1042
+* Improve fallback search path logic. #1088
+ Respect LD_LIBRARY_PATH and DYLD_LIBRARY_PATH on Macos.
+* Update libffi to current git master branch.
+
+Removed:
+* Remove `enum CHAR_ARRAY` which is no longer used. #1063
+
+
+1.16.3 / 2023-10-04
+-------------------
+
+Fixed:
+* Fix gcc error when building on CentOS 7. #1052
+* Avoid trying to store new DataConverter type in frozen TypeDefs hash. #1057
+
+
+1.16.2 / 2023-09-25
+-------------------
+
+Fixed:
+* Handle null pointer crash after fork. #1051
+
+
+1.16.1 / 2023-09-24
+-------------------
+
+Fixed:
+* Fix compiling the builtin libffi. #1049
+
+
+1.16.0 / 2023-09-23
+-------------------
+
+Fixed:
+* Fix an issue with signed bitmasks when using flags on the most significant bit. #949
+* Fix FFI::Pointer#initialize using NUM2LL instead of NUM2ULL.
+* Fix FFI::Type#inspect to properly display the constant name. #1002
+* Use libffi closure allocations on hppa-Linux. #1017
+ Previously they would segfault.
+* Fix class name of Symbol#inspect.
+* Fix MSVC support of libtest. #1028
+* Fix attach_function of functions ending in ? or ! #971
+
+Added:
+* Convert all C-based classes to TypedData and use write barriers. #994, #995, #996, #997, #998, #999, #1000, #1001, #1003, #1004, #1005, #1006, #1007, #1008, #1009, #1010, #1011, #1012
+ This results in less pressure on the garbage collector, since the objects can be promoted to the old generation, which means they only get marked on major GC.
+* Implement `ObjectSpace.memsize_of()` of all C-based classes.
+* Make FFI Ractor compatible. #1023
+ Modules extended per `extend FFI::Library` need to be frozen in order to be used by non-main Ractors.
+ This can be done by calling `freeze` below of all C interface definitions.
+ * In a Ractor it's possible to:
+ * load DLLs and call its functions, access its global variables
+ * use builtin typedefs
+ * use and modify ractor local typedefs
+ * define callbacks
+ * receive async callbacks from non-ruby threads
+ * use frozen FFI::Library based modules with all attributes (enums, structs, typedefs, functions, callbacks)
+ * invoke frozen functions and callbacks defined in the main Ractor
+ * use FFI::Struct definitions from the main Ractor
+ * In a Ractor it's impossible to:
+ * create new FFI::Library based modules
+ * create new FFI::Struct definitions
+ * use custom global typedefs
+ * use non-frozen FFI::Library based modules
+* Allow type retrieval of attached functions+variables. #1023
+* Make FFI classes `GC.compact` friendly. #1021
+* Update libffi and disable custom trampoline when using libffi closure allocation. #1020
+ This is because libffi changed the way how closures are allocated to static trampolines.
+* Add types.conf for loongarch64-linux. #943
+* Add types.conf for sw_64-linux (Shen Wei 64-bit, based on Alpha). #1018
+* Add support for aarch64-windows. #1035
+* Windows: Update LoadLibrary error message to include error code. #1026
+* Allow private release method for FFI::ManagedStruct and FFI::AutoPointer. #1029
+* Add support for passing ABI version to FFI.map_library_name. #963
+ This adds the new class FFI::LibraryPath .
+* Add support for ruby-3.2 to windows binary gem. #1047
+* Enable debug symbols for `rake compile` builds to ease debugging. #1048
+
+Removed:
+* Remove allocator of AbstractMemory. #1013
+ This disables AbstractMemory.new, which has no practical use.
+* Remove unused FFI::SizeTypes. #1022
+
+
+1.15.5 / 2022-01-10
+-------------------
+
+Fixed:
+* Fix long double argument or return values on 32bit i686. #849
+* FFI::ConstGenerator: avoid usage of the same binary file simultaneously. #929
+
+Added:
+* Add Windows fat binary gem for Ruby-3.1
+
+Removed:
+* Remove Windows fat binary gem for Ruby < 2.4
+
+
+1.15.4 / 2021-09-01
+-------------------
+
+Fixed:
+* Fix build for uClibc. #913
+* Correct module lookup when including `ffi-module` gem. #912
+
+Changed:
+* Use ruby code of the ffi gem in JRuby-9.2.20+. #915
+
+
+1.15.3 / 2021-06-16
+-------------------
+
+Fixed:
+* Fix temporary packaging issue with libffi. #904
+
+
+1.15.2 / 2021-06-16
+-------------------
+
+Added:
+* Add support for Windows MINGW-UCRT build. #903
+* Add `/opt/homebrew/lib/` to fallback search paths to improve homebrew support. #880 #882
+
+Changed:
+* Regenerate `types.conf` for FreeBSD12 aarch64. #902
+
+
+1.15.1 / 2021-05-22
+-------------------
+
+Fixed:
+* Append -pthread to linker options. #893
+* Use arm or aarch64 to identify Apple ARM CPU arch. #899
+* Allow overriding `gcc` with the `CC` env var in `const_generator.rb` and `struct_generator.rb`. #897
+
+
+1.15.0 / 2021-03-05
+-------------------
+
+Fixed:
+* Fix MSVC build
+* Fix async callbacks in conjunction with fork(). #884
+
+Added:
+* Allow to pass callbacks in varargs. #885
+* Name the threads for FFI callback dispatcher and async thread calls for easier debugging. #883
+ The name can be retrieved by Thread.name and is shown by Thread.list.inspect etc.
+ Even gdb shows the thread name on supported operating systems.
+* Add types.conf for powerpc64le-linux
+* Add types.conf for riscv64-linux
+* More release automation of ffi gems
+
+Changed:
+* Switch from rubygems-tasks to bundler/gem_helper
+
+Removed:
+* Remove unused VariadicInvoker#init
+
+
+1.14.2 / 2020-12-21
+-------------------
+
+Fixed:
+* Fix builtin libffi on newer Ubuntu caused by an outdated Makefile.in . #863
+
+
+1.14.1 / 2020-12-19
+-------------------
+
+Changed:
+* Revert changes to FFI::Pointer#write_string made in ffi-1.14.0.
+ It breaks compatibilty in a way that can cause hard to find errors. #857
+
+
+1.14.0 / 2020-12-18
+-------------------
+
+Added:
+* Add types.conf for x86_64-msys, x86_64-haiku, aarch64-openbsd and aarch64-darwin (alias arm64-darwin)
+* Add method AbstractMemory#size_limit? . #829
+* Add new extconf option --enable-libffi-alloc which is enabled per default on Apple M1 (arm64-darwin).
+
+Changed:
+* Do NULL pointer check only when array length > 0 . #305
+* Raise an error on an unknown order argument. #830
+* Change FFI::Pointer#write_string to terminate with a NUL byte like other string methods. #805
+* Update bundled libffi to latest master.
+
+Removed:
+* Remove win32/stdint.h and stdbool.h because of copyright issue. #693
+
+Fixed:
+* Fix possible UTF-8 load error in loader script interpretation. #792
+* Fix segfault on non-array argument to #write_array_of_*
+* Fix memory leak in MethodHandle . #815
+* Fix possible segfault in combination with fiddle or other libffi using gems . #835
+* Fix possibility to use ffi ruby gem with JRuby-9.3 . #763
+* Fix a GC issue, when a callback Proc is used on more than 2 callback signatures. #820
+
+
+1.13.1 / 2020-06-09
+-------------------
+
+Changed:
+* Revert use of `ucrtbase.dll` as default C library on Windows-MINGW.
+ `ucrtbase.dll` is still used on MSWIN target. #790
+* Test for `ffi_prep_closure_loc()` to make sure we can use this function.
+ This fixes incorrect use of system libffi on MacOS Mojave (10.14). #787
+* Update types.conf on x86_64-dragonflybsd
+
+
+1.13.0 / 2020-06-01
+-------------------
+
+Added:
+* Add TruffleRuby support. Almost all specs are running on TruffleRuby and succeed. #768
+* Add ruby source files to the java gem. This allows to ship the Ruby library code per platform java gem and add it as a default gem to JRuby. #763
+* Add FFI::Platform::LONG_DOUBLE_SIZE
+* Add bounds checks for writing to an inline char[] . #756
+* Add long double as callback return value. #771
+* Update type definitions and add types from stdint.h and stddef.h on i386-windows, x86_64-windows, x86_64-darwin, x86_64-linux, arm-linux, powerpc-linux. #749
+* Add new type definitions for powerpc-openbsd and sparcv9-openbsd. #775, #778
+
+Changed:
+* Raise required ruby version to >= 2.3.
+* Lots of cleanups and improvements in library, specs and benchmarks.
+* Fix a lot of compiler warnings at the C-extension
+* Fix several install issues on MacOS:
+ * Look for libffi in SDK paths, since recent versions of macOS removed it from `/usr/include` . #757
+ * Fix error `ld: library not found for -lgcc_s.10.4`
+ * Don't built for i386 architecture as it is deprecated
+* Several fixes for MSVC build on Windows. #779
+* Use `ucrtbase.dll` as default C library on Windows instead of old `msvcrt.dll`. #779
+* Update builtin libffi to fix a Powerpc issue with parameters of type long
+* Allow unmodified sourcing of (the ruby code of) this gem in JRuby and TruffleRuby as a default gem. #747
+* Improve check to detect if a module has a #find_type method suitable for FFI. This fixes compatibility with stdlib `mkmf` . #776
+
+Removed:
+* Reject callback with `:string` return type at definition, because it didn't work so far and is not save to use. #751, #782
+
+
+1.12.2 / 2020-02-01
+-------------------
+
+* Fix possible segfault at FFI::Struct#[] and []= after GC.compact . #742
+
+
+1.12.1 / 2020-01-14
+-------------------
+
+Added:
+* Add binary gem support for ruby-2.7 on Windows
+
+
+1.12.0 / 2020-01-14
+-------------------
+
+Added:
+* FFI::VERSION is defined as part of `require 'ffi'` now.
+ It is no longer necessary to `require 'ffi/version'` .
+
+Changed:
+* Update libffi to latest master.
+
+Deprecated:
+* Overwriting struct layouts is now warned and will be disallowed in ffi-2.0. #734, #735
+
+
+1.11.3 / 2019-11-25
+-------------------
+
+Removed:
+* Remove support for tainted objects which cause deprecation warnings in ruby-2.7. #730
+
+
+1.11.2 / 2019-11-11
+-------------------
+
+Added:
+* Add DragonFlyBSD as a platform. #724
+
+Changed:
+* Sort all types.conf files, so that files and changes are easier to compare.
+* Regenerated type conf for freebsd12 and x86_64-linux targets. #722
+* Remove MACOSX_DEPLOYMENT_TARGET that was targeting very old version 10.4. #647
+* Fix library name mangling for non glibc Linux/UNIX. #727
+* Fix compiler warnings raised by ruby-2.7
+* Update libffi to latest master.
+
+
+1.11.1 / 2019-05-20
+-------------------
+
+Changed:
+* Raise required ruby version to >=2.0. #699, #700
+* Fix a possible linker error on ruby < 2.3 on Linux.
+
+
+1.11.0 / 2019-05-17
+-------------------
+This version was yanked on 2019-05-20 to fix an install issue on ruby-1.9.3. #700
+
+Added:
+* Add ability to disable or force use of system libffi. #669
+ Use like `gem inst ffi -- --enable-system-libffi` .
+* Add ability to call FFI callbacks from outside of FFI call frame. #584
+* Add proper documentation to FFI::Generator and ::Task
+* Add gemspec metadata. #696, #698
+
+Changed:
+* Fix stdcall on Win32. #649, #669
+* Fix load paths for FFI::Generator::Task
+* Fix FFI::Pointer#read_string(0) to return a binary String. #692
+* Fix benchmark suite so that it runs on ruby-2.x
+* Move FFI::Platform::CPU from C to Ruby. #663
+* Move FFI::StructByReference to Ruby. #681
+* Move FFI::DataConverter to Ruby (#661)
+* Various cleanups and improvements of specs and benchmarks
+
+Removed:
+* Remove ruby-1.8 and 1.9 compatibility code. #683
+* Remove unused spec files. #684
+
+
+1.10.0 / 2019-01-06
+-------------------
+
+Added:
+* Add /opt/local/lib/ to ffi's fallback library search path. #638
+* Add binary gem support for ruby-2.6 on Windows
+* Add FreeBSD on AArch64 and ARM support. #644
+* Add FFI::LastError.winapi_error on Windows native or Cygwin. #633
+
+Changed:
+* Update to rake-compiler-dock-0.7.0
+* Use 64-bit inodes on FreeBSD >= 12. #644
+* Switch time_t and suseconds_t types to long on FreeBSD. #627
+* Make register_t long_long on 64-bit FreeBSD. #644
+* Fix Pointer#write_array_of_type #637
+
+Removed:
+* Drop binary gem support for ruby-2.0 and 2.1 on Windows
+
+
+1.9.25 / 2018-06-03
+-------------------
+
+Changed:
+* Revert closures via libffi.
+ This re-adds ClosurePool and fixes compat with SELinux enabled systems. #621
+
+
+1.9.24 / 2018-06-02
+-------------------
+
+Security Note:
+
+This update addresses vulnerability CVE-2018-1000201: DLL loading issue which can be hijacked on Windows OS, when a Symbol is used as DLL name instead of a String. Found by Matthew Bush.
+
+Added:
+* Added a CHANGELOG file
+* Add mips64(eb) support, and mips r6 support. (#601)
+
+Changed:
+* Update libffi to latest changes on master.
+* Don't search in hardcoded /usr paths on Windows.
+* Don't treat Symbol args different to Strings in ffi_lib.
+* Make sure size_t is defined in Thread.c. Fixes #609
+
+
+1.9.23 / 2018-02-25
+-------------------
+
+Changed:
+* Fix unnecessary rebuild of configure in darwin multi arch. Fixes #605
+
+
+1.9.22 / 2018-02-22
+-------------------
+
+Changed:
+* Update libffi to latest changes on master.
+* Update detection of system libffi to match new requirements. Fixes #617
+* Prefer bundled libffi over system libffi on Mac OS.
+* Do closures via libffi. This removes ClosurePool and fixes compat with PaX. #540
+* Use a more deterministic gem packaging.
+* Fix unnecessary update of autoconf files at gem install.
+
+
+1.9.21 / 2018-02-06
+-------------------
+
+Added:
+* Ruby-2.5 support by Windows binary gems. Fixes #598
+* Add missing win64 types.
+* Added support for Bitmask. (#573)
+* Add support for MSYS2 (#572) and Sparc64 Linux. (#574)
+
+Changed:
+* Fix read_string to not throw an error on length 0.
+* Don't use absolute paths for sh and env. Fixes usage on Adroid #528
+* Use Ruby implementation for `which` for better compat with Windows. Fixes #315
+* Fix compatibility with PPC64LE platform. (#577)
+* Normalize sparc64 to sparcv9. (#575)
+
+Removed:
+* Drop Ruby 1.8.7 support (#480)
+
+
+1.9.18 / 2017-03-03
+-------------------
+
+Added:
+* Add compatibility with Ruby-2.4.
+
+Changed:
+* Add missing shlwapi.h include to fix Windows build.
+* Avoid undefined behaviour of LoadLibrary() on Windows. #553
+
+
+1.9.17 / 2017-01-13
+-------------------
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/COPYING b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/COPYING
new file mode 100644
index 0000000..7622318
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/COPYING
@@ -0,0 +1,49 @@
+Copyright (c) 2008-2013, Ruby FFI project contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Ruby FFI project nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+libffi, used by this project, is licensed under the MIT license:
+
+libffi - Copyright (c) 1996-2011 Anthony Green, Red Hat, Inc and others.
+See source files for details.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+``Software''), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Gemfile b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Gemfile
new file mode 100644
index 0000000..c0b21a2
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Gemfile
@@ -0,0 +1,23 @@
+source 'https://rubygems.org'
+
+group :development do
+ gem 'benchmark' # necessary on ruby-3.5+
+ gem 'bigdecimal' # necessary on ruby-3.3+
+ gem 'bundler', '>= 1.16', '< 3'
+ gem 'fiddle', platforms: %i[mri windows] # necessary on ruby-3.5+
+ gem 'rake', '~> 13.0'
+ gem 'rake-compiler', '~> 1.1'
+ gem 'rake-compiler-dock', '~> 1.9.0'
+ gem 'rspec', '~> 3.0'
+end
+
+group :doc do
+ gem 'kramdown'
+ gem 'yard', '~> 0.9'
+end
+
+group :type_check do
+ if RUBY_VERSION >= "2.6" && %w[ ruby truffleruby ].include?(RUBY_ENGINE)
+ gem 'rbs', '~> 3.0'
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE
new file mode 100644
index 0000000..20185fd
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2008-2016, Ruby FFI project contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Ruby FFI project nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE.SPECS b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE.SPECS
new file mode 100644
index 0000000..5c9ffce
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/LICENSE.SPECS
@@ -0,0 +1,22 @@
+Copyright (c) 2008-2012 Ruby-FFI contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/README.md b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/README.md
new file mode 100644
index 0000000..0605c81
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/README.md
@@ -0,0 +1,137 @@
+# Ruby-FFI https://github.com/ffi/ffi/wiki
+
+## Description
+
+Ruby-FFI is a gem for programmatically loading dynamically-linked native
+libraries, binding functions within them, and calling those functions
+from Ruby code. Moreover, a Ruby-FFI extension works without changes
+on CRuby (MRI), JRuby, Rubinius and TruffleRuby. [Discover why you should write your next extension
+using Ruby-FFI](https://github.com/ffi/ffi/wiki/why-use-ffi).
+
+## Features
+
+* Intuitive DSL
+* Supports all C native types
+* C structs (also nested), enums and global variables
+* Callbacks from C to Ruby
+* Automatic garbage collection of native memory
+* Usable in Ractor: [How-to-use-FFI-in-Ruby-Ractors](https://github.com/ffi/ffi/wiki/Ractors)
+
+## Synopsis
+
+```ruby
+require 'ffi'
+
+module MyLib
+ extend FFI::Library
+ ffi_lib 'c'
+ attach_function :puts, [ :string ], :int
+end
+
+MyLib.puts 'Hello, World using libc!'
+```
+
+For less minimalistic and more examples you may look at:
+
+* the `samples/` folder
+* the examples on the [wiki](https://github.com/ffi/ffi/wiki)
+* the projects using FFI listed on the wiki: https://github.com/ffi/ffi/wiki/projects-using-ffi
+
+## Requirements
+
+When installing the gem on CRuby (MRI), you will need:
+* A C compiler (e.g., Xcode on macOS, `gcc` or `clang` on everything else)
+Optionally (speeds up installation):
+* The `libffi` library and development headers - this is commonly in the `libffi-dev` or `libffi-devel` packages
+
+The ffi gem comes with a builtin libffi version, which is used, when the system libffi library is not available or too old.
+Use of the system libffi can be enforced by:
+```
+gem install ffi -- --enable-system-libffi # to install the gem manually
+bundle config build.ffi --enable-system-libffi # for bundle install
+```
+or prevented by `--disable-system-libffi`.
+
+On Linux systems running with [PaX](https://en.wikipedia.org/wiki/PaX) (Gentoo, Alpine, etc.), FFI may trigger `mprotect` errors. You may need to disable [mprotect](https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Restrict_mprotect.28.29) for ruby (`paxctl -m [/path/to/ruby]`) for the time being until a solution is found.
+
+On FreeBSD systems pkgconf must be installed for the gem to be able to compile using clang. Install either via packages `pkg install pkgconf` or from ports via `devel/pkgconf`.
+
+On JRuby and TruffleRuby, there are no requirements to install the FFI gem, and `require 'ffi'` works even without installing the gem (i.e., the gem is preinstalled on these implementations).
+
+## Installation
+
+From rubygems:
+
+ [sudo] gem install ffi
+
+From a Gemfile using git or GitHub
+
+ gem 'ffi', github: 'ffi/ffi', submodules: true
+
+or from the git repository on github:
+
+ git clone git://github.com/ffi/ffi.git
+ cd ffi
+ git submodule update --init --recursive
+ bundle install
+ rake install
+
+### Install options:
+
+* `--enable-system-libffi` : Force usage of system libffi
+* `--disable-system-libffi` : Force usage of builtin libffi
+* `--enable-libffi-alloc` : Force closure allocation by libffi
+* `--disable-libffi-alloc` : Force closure allocation by builtin method
+
+## License
+
+The ffi library is covered by the BSD license, also see the LICENSE file.
+The specs are covered by the same license as [ruby/spec](https://github.com/ruby/spec), the MIT license.
+
+## Credits
+
+The following people have submitted code, bug reports, or otherwise contributed to the success of this project:
+
+* Alban Peignier <alban.peignier@free.fr>
+* Aman Gupta <aman@tmm1.net>
+* Andrea Fazzi <andrea.fazzi@alcacoop.it>
+* Andreas Niederl <rico32@gmx.net>
+* Andrew Cholakian <andrew@andrewvc.com>
+* Antonio Terceiro <terceiro@softwarelivre.org>
+* Benoit Daloze <eregontp@gmail.com>
+* Brian Candler <B.Candler@pobox.com>
+* Brian D. Burns <burns180@gmail.com>
+* Bryan Kearney <bkearney@redhat.com>
+* Charlie Savage <cfis@zerista.com>
+* Chikanaga Tomoyuki <nagachika00@gmail.com>
+* Hongli Lai <hongli@phusion.nl>
+* Ian MacLeod <ian@nevir.net>
+* Jake Douglas <jake@shiftedlabs.com>
+* Jean-Dominique Morani <jdmorani@mac.com>
+* Jeremy Hinegardner <jeremy@hinegardner.org>
+* Jesús García Sáez <blaxter@gmail.com>
+* Joe Khoobyar <joe@ankhcraft.com>
+* Jurij Smakov <jurij@wooyd.org>
+* KISHIMOTO, Makoto <ksmakoto@dd.iij4u.or.jp>
+* Kim Burgestrand <kim@burgestrand.se>
+* Lars Kanis <lars@greiz-reinsdorf.de>
+* Luc Heinrich <luc@honk-honk.com>
+* Luis Lavena <luislavena@gmail.com>
+* Matijs van Zuijlen <matijs@matijs.net>
+* Matthew King <automatthew@gmail.com>
+* Mike Dalessio <mike.dalessio@gmail.com>
+* NARUSE, Yui <naruse@airemix.jp>
+* Park Heesob <phasis@gmail.com>
+* Shin Yee <shinyee@speedgocomputing.com>
+* Stephen Bannasch <stephen.bannasch@gmail.com>
+* Suraj N. Kurapati <sunaku@gmail.com>
+* Sylvain Daubert <sylvain.daubert@laposte.net>
+* Victor Costan
+* beoran@gmail.com
+* ctide <christide@christide.com>
+* emboss <Martin.Bosslet@googlemail.com>
+* hobophobe <unusualtears@gmail.com>
+* meh <meh@paranoici.org>
+* postmodern <postmodern.mod3@gmail.com>
+* wycats@gmail.com <wycats@gmail.com>
+* Wayne Meissner <wmeissner@gmail.com>
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Rakefile b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Rakefile
new file mode 100644
index 0000000..3b68a7e
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/Rakefile
@@ -0,0 +1,206 @@
+require 'rbconfig'
+require 'date'
+require 'fileutils'
+require 'yaml'
+require 'rspec/core/rake_task'
+require 'rubygems/package_task'
+require 'rake/extensiontask'
+require_relative "lib/ffi/version"
+require_relative "rakelib/ffi_gem_helper"
+
+BUILD_DIR = "build"
+BUILD_EXT_DIR = File.join(BUILD_DIR, "#{RbConfig::CONFIG['arch']}", 'ffi_c', RUBY_VERSION)
+
+gem_spec = Bundler.load_gemspec('ffi.gemspec')
+
+RSpec::Core::RakeTask.new(:spec) do |config|
+ config.rspec_opts = YAML.load_file 'spec/spec.opts'
+end
+
+desc "Build all packages"
+task :package => %w[ gem:java gem:native ]
+
+CLOBBER.include 'lib/ffi/types.conf'
+CLOBBER.include 'pkg'
+CLOBBER.include 'log'
+
+CLEAN.include 'build'
+CLEAN.include 'conftest.dSYM'
+CLEAN.include 'spec/ffi/fixtures/libtest.{dylib,so,dll}'
+CLEAN.include 'spec/ffi/fixtures/*.o'
+CLEAN.include 'spec/ffi/embed-test/ext/*.{o,def}'
+CLEAN.include 'spec/ffi/embed-test/ext/Makefile'
+CLEAN.include "pkg/ffi-*-*/"
+CLEAN.include 'lib/{2,3}.*'
+
+# clean all shipped files, that are not in git
+CLEAN.include(
+ gem_spec.files -
+ `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0").map { |f| File.join("ext/ffi_c/libffi", f) } -
+ `git ls-files -z`.split("\x0")
+)
+
+task :distclean => :clobber
+
+desc "Test the extension"
+task :test => [ :spec ]
+
+
+namespace :bench do
+ ITER = ENV['ITER'] ? ENV['ITER'].to_i : 100000
+ bench_files = Dir["bench/bench_*.rb"].sort.reject { |f| f == "bench/bench_helper.rb" }
+ bench_files.each do |bench|
+ task File.basename(bench, ".rb")[6..-1] => :compile do
+ sh %{#{Gem.ruby} #{bench} #{ITER}}
+ end
+ end
+ task :all => :compile do
+ bench_files.each do |bench|
+ sh %{#{Gem.ruby} #{bench}}
+ end
+ end
+end
+
+task 'spec:run' => :compile
+task 'spec:specdoc' => :compile
+
+task :default => :spec
+
+namespace 'java' do
+
+ java_gem_spec = gem_spec.dup.tap do |s|
+ s.files.reject! { |f| File.fnmatch?("ext/*", f) }
+ s.extensions = []
+ s.platform = 'java'
+ end
+
+ Gem::PackageTask.new(java_gem_spec) do |pkg|
+ pkg.need_zip = true
+ pkg.need_tar = true
+ pkg.package_dir = 'pkg'
+ end
+end
+
+task 'gem:java' => 'java:gem'
+
+FfiGemHelper.install_tasks
+# Register binary gems to be pushed to rubygems.org
+Bundler::GemHelper.instance.cross_platforms = %w[
+ x86-mingw32
+ x64-mingw-ucrt
+ x64-mingw32
+ x86-linux-gnu
+ x86-linux-musl
+ x86_64-linux-gnu
+ x86_64-linux-musl
+ arm-linux-gnu
+ arm-linux-musl
+ aarch64-linux-gnu
+ aarch64-linux-musl
+ x86_64-darwin
+ arm64-darwin
+]
+
+if RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx'
+ require 'rake/extensiontask'
+ Rake::ExtensionTask.new('ffi_c', gem_spec) do |ext|
+ ext.name = 'ffi_c' # indicate the name of the extension.
+ # ext.lib_dir = BUILD_DIR # put binaries into this folder.
+ ext.tmp_dir = BUILD_DIR # temporary folder used during compilation.
+ ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
+ ext.cross_platform = Bundler::GemHelper.instance.cross_platforms
+ ext.cross_compiling do |spec|
+ spec.files.reject! { |path| File.fnmatch?('ext/*', path) }
+ end
+ # Enable debug info for 'rake compile' but not for 'gem install'
+ ext.config_options << "--enable-debug"
+
+ end
+else
+ task :compile do
+ STDERR.puts "Nothing to compile on #{RUBY_ENGINE}"
+ end
+end
+
+
+namespace "gem" do
+ task 'prepare' do
+ require 'rake_compiler_dock'
+ sh "bundle package --all"
+ end
+
+ Bundler::GemHelper.instance.cross_platforms.each do |plat|
+ desc "Build all native binary gems in parallel"
+ multitask 'native' => plat
+
+ desc "Build the native gem for #{plat}"
+ task plat => ['prepare', 'build'] do
+ RakeCompilerDock.sh <<-EOT, platform: plat
+ sudo apt-get update && sudo apt-get install -y libltdl-dev &&
+ bundle --local &&
+ rake native:#{plat} pkg/#{gem_spec.full_name}-#{plat}.gem MAKE='nice make -j`nproc`' RUBY_CC_VERSION=#{RakeCompilerDock.ruby_cc_version("~>2.5", "~>3.0")}
+ EOT
+ end
+ end
+end
+
+directory "ext/ffi_c/libffi"
+file "ext/ffi_c/libffi/autogen.sh" => "ext/ffi_c/libffi" do
+ warn "Downloading libffi ..."
+ sh "git submodule update --init --recursive"
+end
+task :libffi => "ext/ffi_c/libffi/autogen.sh"
+
+LIBFFI_GIT_FILES = `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0")
+
+# Generate files which are in the gemspec but not in libffi's git repo by running autogen.sh
+gem_spec.files.select do |f|
+ f =~ /ext\/ffi_c\/libffi\/(.*)/ && !LIBFFI_GIT_FILES.include?($1)
+end.each do |f|
+ file f => "ext/ffi_c/libffi/autogen.sh" do
+ chdir "ext/ffi_c/libffi" do
+ sh "sh ./autogen.sh"
+ end
+ touch f
+ if gem_spec.files != Gem::Specification.load('./ffi.gemspec').files
+ warn "gemspec files have changed -> Please restart rake!"
+ exit 1
+ end
+ end
+end
+
+# Make sure we have all gemspec files before packaging
+task :build => gem_spec.files
+task :gem => :build
+
+
+require_relative "lib/ffi/platform"
+types_conf = File.expand_path(File.join(FFI::Platform::CONF_DIR, 'types.conf'))
+logfile = File.join(File.dirname(__FILE__), 'types_log')
+
+task types_conf do |task|
+ require 'fileutils'
+ require_relative "lib/ffi/tools/types_generator"
+ options = {}
+ FileUtils.mkdir_p(File.dirname(task.name), mode: 0755 )
+ File.open(task.name, File::CREAT|File::TRUNC|File::RDWR, 0644) do |f|
+ f.puts FFI::TypesGenerator.generate(options)
+ end
+ File.open(logfile, 'w') do |log|
+ log.puts(types_conf)
+ end
+end
+
+desc "Create or update type information for platform #{FFI::Platform::NAME}"
+task :types_conf => types_conf
+
+begin
+ require 'yard'
+
+ namespace :doc do
+ YARD::Rake::YardocTask.new do |yard|
+ end
+ end
+rescue LoadError
+ warn "[warn] YARD unavailable"
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/ffi.gemspec b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/ffi.gemspec
new file mode 100644
index 0000000..07d549f
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/ffi.gemspec
@@ -0,0 +1,42 @@
+require File.expand_path("../lib/#{File.basename(__FILE__, '.gemspec')}/version", __FILE__)
+
+Gem::Specification.new do |s|
+ s.name = 'ffi'
+ s.version = FFI::VERSION
+ s.author = 'Wayne Meissner'
+ s.email = 'wmeissner@gmail.com'
+ s.homepage = 'https://github.com/ffi/ffi/wiki'
+ s.summary = 'Ruby FFI'
+ s.description = 'Ruby FFI library'
+ if s.respond_to?(:metadata)
+ s.metadata['bug_tracker_uri'] = 'https://github.com/ffi/ffi/issues'
+ s.metadata['changelog_uri'] = 'https://github.com/ffi/ffi/blob/master/CHANGELOG.md'
+ s.metadata['documentation_uri'] = 'https://github.com/ffi/ffi/wiki'
+ s.metadata['wiki_uri'] = 'https://github.com/ffi/ffi/wiki'
+ s.metadata['source_code_uri'] = 'https://github.com/ffi/ffi/'
+ s.metadata['mailing_list_uri'] = 'http://groups.google.com/group/ruby-ffi'
+ end
+ s.files = `git ls-files -z`.split("\x0").reject do |f|
+ f =~ /^(\.|bench|gen|libtest|nbproject|spec)/
+ end
+
+ # Add libffi git files
+ lfs = `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0")
+ # Add autoconf generated files of libffi
+ lfs += %w[ compile configure config.guess config.sub install-sh ltmain.sh missing fficonfig.h.in ]
+ # Add automake generated files of libffi
+ lfs += `git --git-dir ext/ffi_c/libffi/.git ls-files -z *.am */*.am`.gsub(".am\0", ".in\0").split("\x0")
+ s.files += lfs.map do |f|
+ File.join("ext/ffi_c/libffi", f)
+ end
+
+ s.extensions << 'ext/ffi_c/extconf.rb'
+ s.rdoc_options = %w[--exclude=ext/ffi_c/.*\.o$ --exclude=ffi_c\.(bundle|so)$]
+ s.license = 'BSD-3-Clause'
+ s.require_paths << 'ext/ffi_c'
+ s.required_ruby_version = '>= 2.5'
+ s.add_development_dependency 'rake', '~> 13.0'
+ s.add_development_dependency 'rake-compiler', '~> 1.1'
+ s.add_development_dependency 'rake-compiler-dock', '~> 1.0'
+ s.add_development_dependency 'rspec', '~> 2.14.1'
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.5/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.5/ffi_c.bundle
new file mode 100755
index 0000000..5cb52f4
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.5/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.6/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.6/ffi_c.bundle
new file mode 100755
index 0000000..6b7e956
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.6/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.7/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.7/ffi_c.bundle
new file mode 100755
index 0000000..e5c8379
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/2.7/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.0/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.0/ffi_c.bundle
new file mode 100755
index 0000000..cb9de9c
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.0/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.1/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.1/ffi_c.bundle
new file mode 100755
index 0000000..5fabc32
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.1/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.2/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.2/ffi_c.bundle
new file mode 100755
index 0000000..8bbf124
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.2/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.3/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.3/ffi_c.bundle
new file mode 100755
index 0000000..3e75a9a
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.3/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.4/ffi_c.bundle b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.4/ffi_c.bundle
new file mode 100755
index 0000000..cc6e8c9
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/3.4/ffi_c.bundle
Binary files differ
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi.rb
new file mode 100644
index 0000000..3fb20a8
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi.rb
@@ -0,0 +1,27 @@
+if RUBY_ENGINE == 'ruby'
+ begin
+ require RUBY_VERSION.split('.')[0, 2].join('.') + '/ffi_c'
+ rescue Exception
+ require 'ffi_c'
+ end
+
+ require 'ffi/ffi'
+
+elsif RUBY_ENGINE == 'jruby' && (RUBY_ENGINE_VERSION.split('.').map(&:to_i) <=> [9, 2, 20]) >= 0
+ JRuby::Util.load_ext("org.jruby.ext.ffi.FFIService")
+ require 'ffi/ffi'
+
+elsif RUBY_ENGINE == 'truffleruby' && (RUBY_ENGINE_VERSION.split('.').map(&:to_i) <=> [20, 1, 0]) >= 0
+ require 'truffleruby/ffi_backend'
+ require 'ffi/ffi'
+
+else
+ # Remove the ffi gem dir from the load path, then reload the internal ffi implementation
+ $LOAD_PATH.delete(File.dirname(__FILE__))
+ $LOAD_PATH.delete(File.join(File.dirname(__FILE__), 'ffi'))
+ unless $LOADED_FEATURES.nil?
+ $LOADED_FEATURES.delete(__FILE__)
+ $LOADED_FEATURES.delete('ffi.rb')
+ end
+ require 'ffi.rb'
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/abstract_memory.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/abstract_memory.rb
new file mode 100644
index 0000000..e0aa221
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/abstract_memory.rb
@@ -0,0 +1,44 @@
+#
+# Copyright (C) 2020 Lars Kanis
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+
+module FFI
+ class AbstractMemory
+ LONG_MAX = FFI::Pointer.new(1).size
+ private_constant :LONG_MAX
+
+ # Return +true+ if +self+ has a size limit.
+ #
+ # @return [Boolean]
+ def size_limit?
+ size != LONG_MAX
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/autopointer.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/autopointer.rb
new file mode 100644
index 0000000..d93bc45
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/autopointer.rb
@@ -0,0 +1,180 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+# Copyright (C) 2008 Mike Dalessio
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+module FFI
+ class AutoPointer < Pointer
+ extend DataConverter
+
+ # @overload initialize(pointer, method)
+ # @param pointer [Pointer]
+ # @param method [Method]
+ # @return [self]
+ # The passed Method will be invoked at GC time.
+ # @overload initialize(pointer, proc)
+ # @param pointer [Pointer]
+ # @return [self]
+ # The passed Proc will be invoked at GC time (SEE WARNING BELOW!)
+ # @note WARNING: passing a proc _may_ cause your pointer to never be
+ # GC'd, unless you're careful to avoid trapping a reference to the
+ # pointer in the proc. See the test specs for examples.
+ # @overload initialize(pointer)
+ # @param pointer [Pointer]
+ # @return [self]
+ # The pointer's release() class method will be invoked at GC time.
+ #
+ # @note The safest, and therefore preferred, calling
+ # idiom is to pass a Method as the second parameter. Example usage:
+ #
+ # class PointerHelper
+ # def self.release(pointer)
+ # ...
+ # end
+ # end
+ #
+ # p = AutoPointer.new(other_pointer, PointerHelper.method(:release))
+ #
+ # The above code will cause PointerHelper#release to be invoked at GC time.
+ #
+ # @note
+ # The last calling idiom (only one parameter) is generally only
+ # going to be useful if you subclass {AutoPointer}, and override
+ # #release, which by default does nothing.
+ def initialize(ptr, proc=nil)
+ raise TypeError, "Invalid pointer" if ptr.nil? || !ptr.kind_of?(Pointer) ||
+ ptr.kind_of?(MemoryPointer) || ptr.kind_of?(AutoPointer)
+ super(ptr.type_size, ptr)
+
+ @releaser = if proc
+ if not proc.respond_to?(:call)
+ raise RuntimeError.new("proc must be callable")
+ end
+ Releaser.new(ptr, proc)
+
+ else
+ if not self.class.respond_to?(:release, true)
+ raise RuntimeError.new("no release method defined")
+ end
+ Releaser.new(ptr, self.class.method(:release))
+ end
+
+ ObjectSpace.define_finalizer(self, @releaser)
+ self
+ end
+
+ # @return [nil]
+ # Free the pointer.
+ def free
+ @releaser.free
+ end
+
+ # @param [Boolean] autorelease
+ # @return [Boolean] +autorelease+
+ # Set +autorelease+ property. See {Pointer Autorelease section at Pointer}.
+ def autorelease=(autorelease)
+ raise FrozenError.new("can't modify frozen #{self.class}") if frozen?
+ @releaser.autorelease=(autorelease)
+ end
+
+ # @return [Boolean] +autorelease+
+ # Get +autorelease+ property. See {Pointer Autorelease section at Pointer}.
+ def autorelease?
+ @releaser.autorelease
+ end
+
+ # @abstract Base class for {AutoPointer}'s releasers.
+ #
+ # All subclasses of Releaser should define a +#release(ptr)+ method.
+ # A releaser is an object in charge of release an {AutoPointer}.
+ class Releaser
+ attr_accessor :autorelease
+
+ # @param [Pointer] ptr
+ # @param [#call] proc
+ # @return [nil]
+ # A new instance of Releaser.
+ def initialize(ptr, proc)
+ @ptr = ptr
+ @proc = proc
+ @autorelease = true
+ end
+
+ # @return [nil]
+ # Free pointer.
+ def free
+ if @ptr
+ release(@ptr)
+ @autorelease = false
+ @ptr = nil
+ @proc = nil
+ end
+ end
+
+ # @param args
+ # Release pointer if +autorelease+ is set.
+ def call(*args)
+ release(@ptr) if @autorelease && @ptr
+ end
+
+ # Release +ptr+ by using Proc or Method defined at +ptr+
+ # {AutoPointer#initialize initialization}.
+ #
+ # @param [Pointer] ptr
+ # @return [nil]
+ def release(ptr)
+ @proc.call(ptr)
+ end
+ end
+
+ # Return native type of AutoPointer.
+ #
+ # Override {DataConverter#native_type}.
+ # @return [Type::POINTER]
+ # @raise {RuntimeError} if class does not implement a +#release+ method
+ def self.native_type
+ if not self.respond_to?(:release, true)
+ raise RuntimeError.new("no release method defined for #{self.inspect}")
+ end
+ Type::POINTER
+ end
+
+ # Create a new AutoPointer.
+ #
+ # Override {DataConverter#from_native}.
+ # @overload self.from_native(ptr, ctx)
+ # @param [Pointer] ptr
+ # @param ctx not used. Please set +nil+.
+ # @return [AutoPointer]
+ def self.from_native(val, ctx)
+ self.new(val)
+ end
+ end
+
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/buffer.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/buffer.rb
new file mode 100644
index 0000000..449e45b
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/buffer.rb
@@ -0,0 +1,4 @@
+#
+# All the code from this file is now implemented in C. This file remains
+# to satisfy any leftover require 'ffi/buffer' in user code
+#
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/callback.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/callback.rb
new file mode 100644
index 0000000..32d52f7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/callback.rb
@@ -0,0 +1,4 @@
+#
+# All the code from this file is now implemented in C. This file remains
+# to satisfy any leftover require 'ffi/callback' in user code
+#
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/compat.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/compat.rb
new file mode 100644
index 0000000..7569013
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/compat.rb
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2023-2023 Lars Kanis
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+module FFI
+ if defined?(Ractor.make_shareable)
+ # This is for FFI internal use only.
+ def self.make_shareable(obj)
+ Ractor.make_shareable(obj)
+ end
+ else
+ def self.make_shareable(obj)
+ obj.freeze
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/data_converter.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/data_converter.rb
new file mode 100644
index 0000000..7852e7e
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/data_converter.rb
@@ -0,0 +1,67 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+module FFI
+ # This module is used to extend somes classes and give then a common API.
+ #
+ # Most of methods defined here must be overridden.
+ module DataConverter
+ # Get native type.
+ #
+ # @overload native_type(type)
+ # @param [String, Symbol, Type] type
+ # @return [Type]
+ # Get native type from +type+.
+ #
+ # @overload native_type
+ # @raise {NotImplementedError} This method must be overridden.
+ def native_type(type = nil)
+ if type
+ @native_type = FFI.find_type(type)
+ else
+ native_type = @native_type
+ unless native_type
+ raise NotImplementedError, 'native_type method not overridden and no native_type set'
+ end
+ native_type
+ end
+ end
+
+ # Convert to a native type.
+ def to_native(value, ctx)
+ value
+ end
+
+ # Convert from a native type.
+ def from_native(value, ctx)
+ value
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/dynamic_library.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/dynamic_library.rb
new file mode 100644
index 0000000..468ce04
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/dynamic_library.rb
@@ -0,0 +1,118 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+module FFI
+ class DynamicLibrary
+ SEARCH_PATH = []
+
+ # The following search paths are tried, if the library could not be loaded in the first attempt.
+ # They are only executed on Macos in the following order:
+ if FFI::Platform.mac?
+
+ # 1. Try library paths possibly defined in LD_LIBRARY_PATH DYLD_LIBRARY_PATH first.
+ # This is because dlopen doesn't respect LD_LIBRARY_PATH and DYLD_LIBRARY_PATH is deleted by SIP-protected binaries.
+ # See here for details: https://github.com/ffi/ffi/issues/923#issuecomment-1872565313
+ %w[LD_LIBRARY_PATH DYLD_LIBRARY_PATH].each do |custom_path|
+ SEARCH_PATH.concat ENV.fetch(custom_path,"").split(File::PATH_SEPARATOR)
+ end
+
+ # 2. Then on macos/arm64 try /opt/homebrew/lib, since this is a typical standard directory.
+ # FFI is often used together with homebrew, so that we hardcode the path for arm64 here.
+ if FFI::Platform::ARCH == 'aarch64'
+ SEARCH_PATH << '/opt/homebrew/lib'
+ end
+
+ # 3. Then try typical system directories starting with the /local/ directory first.
+ #
+ # /usr/local/lib is used by homebrow on x86_64.
+ # /opt/local/lib is used by MacPorts and Fink.
+ # /usr/lib is there, because it was always there.
+ SEARCH_PATH.concat %w[/opt/local/lib /usr/local/lib /usr/lib]
+ end
+
+ # On Linux the library lookup paths are usually defined through /etc/ld.so.conf, which can be changed at will with root permissions.
+ # Also LD_LIBRARY_PATH is respected by the dynamic loader, so that there's usually no need and no advantage to do a fallback handling.
+ #
+ # Windows has it's own library lookup logic, very different to what we do here.
+ # See: https://github.com/oneclick/rubyinstaller2/wiki/For-gem-developers#user-content-dll-loading
+
+ FFI.make_shareable(SEARCH_PATH)
+ SEARCH_PATH_MESSAGE = "Searched in <system library path>#{ SEARCH_PATH.map{|a| ', ' + a}.join }".freeze
+
+ def self.load_library(name, flags)
+ if name == FFI::CURRENT_PROCESS
+ FFI::DynamicLibrary.open(nil, RTLD_LAZY | RTLD_LOCAL)
+ else
+ flags ||= RTLD_LAZY | RTLD_LOCAL
+
+ libnames = (name.is_a?(::Array) ? name : [name])
+ libnames = libnames.map(&:to_s).map { |n| [n, FFI.map_library_name(n)].uniq }.flatten.compact
+ errors = []
+
+ libnames.each do |libname|
+ lib = try_load(libname, flags, errors)
+ return lib if lib
+
+ unless libname.start_with?("/")
+ SEARCH_PATH.each do |prefix|
+ path = "#{prefix}/#{libname}"
+ if File.exist?(path)
+ lib = try_load(path, flags, errors)
+ return lib if lib
+ end
+ end
+ end
+ end
+
+ raise LoadError, [*errors, SEARCH_PATH_MESSAGE].join(".\n")
+ end
+ end
+ private_class_method :load_library
+
+ def self.try_load(libname, flags, errors)
+ begin
+ lib = FFI::DynamicLibrary.open(libname, flags)
+ return lib if lib
+
+ # LoadError for C ext & JRuby, RuntimeError for TruffleRuby
+ rescue LoadError, RuntimeError => ex
+ if ex.message =~ /(([^ \t()])+\.so([^ \t:()])*):([ \t])*(invalid ELF header|file too short|invalid file format)/
+ if File.binread($1) =~ /(?:GROUP|INPUT) *\( *([^ \)]+)/
+ return try_load($1, flags, errors)
+ end
+ end
+
+ errors << ex
+ nil
+ end
+ end
+ private_class_method :try_load
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/enum.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/enum.rb
new file mode 100644
index 0000000..af78331
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/enum.rb
@@ -0,0 +1,302 @@
+#
+# Copyright (C) 2009, 2010 Wayne Meissner
+# Copyright (C) 2009 Luc Heinrich
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+module FFI
+
+ # An instance of this class permits to manage {Enum}s. In fact, Enums is a collection of {Enum}s.
+ class Enums
+
+ def initialize
+ @all_enums = Array.new
+ @tagged_enums = Hash.new
+ @symbol_map = Hash.new
+ end
+
+ # @param [Enum] enum
+ # Add an {Enum} to the collection.
+ def <<(enum)
+ @all_enums << enum
+ @tagged_enums[enum.tag] = enum unless enum.tag.nil?
+ @symbol_map.merge!(enum.symbol_map)
+ end
+
+ # @param query enum tag or part of an enum name
+ # @return [Enum]
+ # Find a {Enum} in collection.
+ def find(query)
+ if @tagged_enums.has_key?(query)
+ @tagged_enums[query]
+ else
+ @all_enums.detect { |enum| enum.symbols.include?(query) }
+ end
+ end
+
+ # @param symbol a symbol to find in merge symbol maps of all enums.
+ # @return a symbol
+ def __map_symbol(symbol)
+ @symbol_map[symbol]
+ end
+
+ end
+
+ # Represents a C enum.
+ #
+ # For a C enum:
+ # enum fruits {
+ # apple,
+ # banana,
+ # orange,
+ # pineapple
+ # };
+ # are defined this vocabulary:
+ # * a _symbol_ is a word from the enumeration (ie. _apple_, by example);
+ # * a _value_ is the value of a symbol in the enumeration (by example, apple has value _0_ and banana _1_).
+ class Enum
+ include DataConverter
+
+ attr_reader :tag
+ attr_reader :native_type
+
+ # @overload initialize(info, tag=nil)
+ # @param [nil, Enumerable] info
+ # @param [nil, Symbol] tag enum tag
+ # @overload initialize(native_type, info, tag=nil)
+ # @param [FFI::Type] native_type Native type for new Enum
+ # @param [nil, Enumerable] info symbols and values for new Enum
+ # @param [nil, Symbol] tag name of new Enum
+ def initialize(*args)
+ @native_type = args.first.kind_of?(FFI::Type) ? args.shift : Type::INT
+ info, @tag = *args
+ @kv_map = Hash.new
+ unless info.nil?
+ last_cst = nil
+ value = 0
+ info.each do |i|
+ case i
+ when Symbol
+ raise ArgumentError, "duplicate enum key" if @kv_map.has_key?(i)
+ @kv_map[i] = value
+ last_cst = i
+ value += 1
+ when Integer
+ @kv_map[last_cst] = i
+ value = i+1
+ end
+ end
+ end
+ @vk_map = @kv_map.invert
+ end
+
+ # @return [Array] enum symbol names
+ def symbols
+ @kv_map.keys
+ end
+
+ # Get a symbol or a value from the enum.
+ # @overload [](query)
+ # Get enum value from symbol.
+ # @param [Symbol] query
+ # @return [Integer]
+ # @overload [](query)
+ # Get enum symbol from value.
+ # @param [Integer] query
+ # @return [Symbol]
+ def [](query)
+ case query
+ when Symbol
+ @kv_map[query]
+ when Integer
+ @vk_map[query]
+ end
+ end
+ alias find []
+
+ # Get the symbol map.
+ # @return [Hash]
+ def symbol_map
+ @kv_map
+ end
+
+ alias to_h symbol_map
+ alias to_hash symbol_map
+
+ # @param [Symbol, Integer, #to_int] val
+ # @param ctx unused
+ # @return [Integer] value of a enum symbol
+ def to_native(val, ctx)
+ @kv_map[val] || if val.is_a?(Integer)
+ val
+ elsif val.respond_to?(:to_int)
+ val.to_int
+ else
+ raise ArgumentError, "invalid enum value, #{val.inspect}"
+ end
+ end
+
+ # @param val
+ # @return symbol name if it exists for +val+.
+ def from_native(val, ctx)
+ @vk_map[val] || val
+ end
+ end
+
+ # Represents a C enum whose values are power of 2
+ #
+ # @example
+ # enum {
+ # red = (1<<0),
+ # green = (1<<1),
+ # blue = (1<<2)
+ # }
+ #
+ # Contrary to classical enums, bitmask values are usually combined
+ # when used.
+ class Bitmask < Enum
+
+ # @overload initialize(info, tag=nil)
+ # @param [nil, Enumerable] info symbols and bit rank for new Bitmask
+ # @param [nil, Symbol] tag name of new Bitmask
+ # @overload initialize(native_type, info, tag=nil)
+ # @param [FFI::Type] native_type Native type for new Bitmask
+ # @param [nil, Enumerable] info symbols and bit rank for new Bitmask
+ # @param [nil, Symbol] tag name of new Bitmask
+ def initialize(*args)
+ @native_type = args.first.kind_of?(FFI::Type) ? args.shift : Type::INT
+ @signed = [Type::INT8, Type::INT16, Type::INT32, Type::INT64].include?(@native_type)
+ info, @tag = *args
+ @kv_map = Hash.new
+ unless info.nil?
+ last_cst = nil
+ value = 0
+ info.each do |i|
+ case i
+ when Symbol
+ raise ArgumentError, "duplicate bitmask key" if @kv_map.has_key?(i)
+ @kv_map[i] = 1 << value
+ last_cst = i
+ value += 1
+ when Integer
+ raise ArgumentError, "bitmask index should be positive" if i<0
+ @kv_map[last_cst] = 1 << i
+ value = i+1
+ end
+ end
+ end
+ @vk_map = @kv_map.invert
+ end
+
+ # Get a symbol list or a value from the bitmask
+ # @overload [](*query)
+ # Get bitmask value from symbol list
+ # @param [Symbol] query
+ # @return [Integer]
+ # @overload [](query)
+ # Get bitmask value from symbol array
+ # @param [Array<Symbol>] query
+ # @return [Integer]
+ # @overload [](*query)
+ # Get a list of bitmask symbols corresponding to
+ # the or reduction of a list of integer
+ # @param [Integer] query
+ # @return [Array<Symbol>]
+ # @overload [](query)
+ # Get a list of bitmask symbols corresponding to
+ # the or reduction of a list of integer
+ # @param [Array<Integer>] query
+ # @return [Array<Symbol>]
+ def [](*query)
+ flat_query = query.flatten
+ raise ArgumentError, "query should be homogeneous, #{query.inspect}" unless flat_query.all? { |o| o.is_a?(Symbol) } || flat_query.all? { |o| o.is_a?(Integer) || o.respond_to?(:to_int) }
+ case flat_query[0]
+ when Symbol
+ flat_query.inject(0) do |val, o|
+ v = @kv_map[o]
+ if v then val | v else val end
+ end
+ when Integer, ->(o) { o.respond_to?(:to_int) }
+ val = flat_query.inject(0) { |mask, o| mask |= o.to_int }
+ @kv_map.select { |_, v| v & val != 0 }.keys
+ end
+ end
+
+ # Get the native value of a bitmask
+ # @overload to_native(query, ctx)
+ # @param [Symbol, Integer, #to_int] query
+ # @param ctx unused
+ # @return [Integer] value of a bitmask
+ # @overload to_native(query, ctx)
+ # @param [Array<Symbol, Integer, #to_int>] query
+ # @param ctx unused
+ # @return [Integer] value of a bitmask
+ def to_native(query, ctx)
+ return 0 if query.nil?
+ flat_query = [query].flatten
+ res = flat_query.inject(0) do |val, o|
+ case o
+ when Symbol
+ v = @kv_map[o]
+ raise ArgumentError, "invalid bitmask value, #{o.inspect}" unless v
+ val | v
+ when Integer
+ val | o
+ when ->(obj) { obj.respond_to?(:to_int) }
+ val | o.to_int
+ else
+ raise ArgumentError, "invalid bitmask value, #{o.inspect}"
+ end
+ end
+ # Take two's complement of positive values bigger than the max value
+ # for the type when native type is signed.
+ if @signed && res >= (1 << (@native_type.size * 8 - 1))
+ res = -(-res & ((1 << (@native_type.size * 8)) - 1))
+ end
+ res
+ end
+
+ # @param [Integer] val
+ # @param ctx unused
+ # @return [Array<Symbol, Integer>] list of symbol names corresponding to val, plus an optional remainder if some bits don't match any constant
+ def from_native(val, ctx)
+ flags = @kv_map.select { |_, v| v & val != 0 }
+ list = flags.keys
+ # force an unsigned value of the correct size
+ val &= (1 << (@native_type.size * 8)) - 1 if @signed
+ # If there are unmatch flags,
+ # return them in an integer,
+ # else information can be lost.
+ # Similar to Enum behavior.
+ remainder = val ^ flags.values.reduce(0, :|)
+ list.push remainder unless remainder == 0
+ return list
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/errno.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/errno.rb
new file mode 100644
index 0000000..de82d89
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/errno.rb
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+module FFI
+ # @return (see FFI::LastError.error)
+ # @see FFI::LastError.error
+ def self.errno
+ FFI::LastError.error
+ end
+ # @param error (see FFI::LastError.error=)
+ # @return (see FFI::LastError.error=)
+ # @see FFI::LastError.error=
+ def self.errno=(error)
+ FFI::LastError.error = error
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/ffi.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/ffi.rb
new file mode 100644
index 0000000..4782270
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/ffi.rb
@@ -0,0 +1,109 @@
+#
+# Copyright (C) 2008-2010 JRuby project
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+require 'ffi/compat'
+require 'ffi/platform'
+require 'ffi/data_converter'
+require 'ffi/types'
+require 'ffi/library_path'
+require 'ffi/library'
+require 'ffi/errno'
+require 'ffi/abstract_memory'
+require 'ffi/pointer'
+require 'ffi/memorypointer'
+require 'ffi/struct'
+require 'ffi/union'
+require 'ffi/managedstruct'
+require 'ffi/callback'
+require 'ffi/io'
+require 'ffi/autopointer'
+require 'ffi/variadic'
+require 'ffi/enum'
+require 'ffi/version'
+require 'ffi/function'
+
+module FFI
+ module ModernForkTracking
+ def _fork
+ pid = super
+ if pid == 0
+ FFI._async_cb_dispatcher_atfork_child
+ end
+ pid
+ end
+ end
+
+ module LegacyForkTracking
+ module KernelExt
+ def fork
+ if block_given?
+ super do
+ FFI._async_cb_dispatcher_atfork_child
+ yield
+ end
+ else
+ pid = super
+ FFI._async_cb_dispatcher_atfork_child if pid.nil?
+ pid
+ end
+ end
+ end
+
+ module KernelExtPrivate
+ include KernelExt
+ private :fork
+ end
+
+ module IOExt
+ def popen(*args)
+ return super unless args[0] == '-'
+
+ super(*args) do |pipe|
+ FFI._async_cb_dispatcher_atfork_child if pipe.nil?
+ yield pipe
+ end
+ end
+ ruby2_keywords :popen if respond_to?(:ruby2_keywords)
+ end
+ end
+
+ if Process.respond_to?(:_fork)
+ # The nice Ruby 3.1+ way of doing things
+ ::Process.singleton_class.prepend(ModernForkTracking)
+ elsif Process.respond_to?(:fork)
+ # Barf. Old CRuby.
+ # Most of the inspiration for how to do this was stolen from ActiveSupport.
+ ::Object.prepend(LegacyForkTracking::KernelExtPrivate)
+ ::Object.singleton_class.prepend(LegacyForkTracking::KernelExt)
+ ::Kernel.prepend(LegacyForkTracking::KernelExtPrivate)
+ ::Kernel.singleton_class.prepend(LegacyForkTracking::KernelExt)
+ ::IO.singleton_class.prepend(LegacyForkTracking::IOExt)
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/function.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/function.rb
new file mode 100644
index 0000000..eb2ae00
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/function.rb
@@ -0,0 +1,71 @@
+#
+# Copyright (C) 2008-2010 JRuby project
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+module FFI
+ class Function
+ # Only MRI allows function type queries
+ if private_method_defined?(:type)
+ # Retrieve the return type of the function
+ #
+ # This method returns FFI type returned by the function.
+ #
+ # @return [FFI::Type]
+ def return_type
+ type.return_type
+ end
+
+ # Retrieve Array of parameter types
+ #
+ # This method returns an Array of FFI types accepted as function parameters.
+ #
+ # @return [Array<FFI::Type>]
+ def param_types
+ type.param_types
+ end
+ end
+
+ # Stash the Function in a module variable so it can be inspected by attached_functions.
+ # On CRuby it also ensures that it does not get garbage collected.
+ module RegisterAttach
+ def attach(mod, name)
+ funcs = mod.instance_variable_defined?("@ffi_functions") && mod.instance_variable_get("@ffi_functions")
+ unless funcs
+ funcs = {}
+ mod.instance_variable_set("@ffi_functions", funcs)
+ end
+ funcs[name.to_sym] = self
+ # Jump to the native attach method of CRuby, JRuby or Tuffleruby
+ super
+ end
+ end
+ private_constant :RegisterAttach
+ prepend RegisterAttach
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/io.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/io.rb
new file mode 100644
index 0000000..7fb2857
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/io.rb
@@ -0,0 +1,62 @@
+#
+# Copyright (C) 2008, 2009 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+module FFI
+
+ # This module implements a couple of class methods to play with IO.
+ module IO
+ # @param [Integer] fd file decriptor
+ # @param [String] mode mode string
+ # @return [::IO]
+ # Synonym for IO::for_fd.
+ def self.for_fd(fd, mode = "r")
+ ::IO.for_fd(fd, mode)
+ end
+
+ # @param [#read] io io to read from
+ # @param [AbstractMemory] buf destination for data read from +io+
+ # @param [nil, Integer] len maximul number of bytes to read from +io+. If +nil+,
+ # read until end of file.
+ # @return [Integer] length really read, in bytes
+ #
+ # A version of IO#read that reads data from an IO and put then into a native buffer.
+ #
+ # This will be optimized at some future time to eliminate the double copy.
+ #
+ def self.native_read(io, buf, len)
+ tmp = io.read(len)
+ return -1 unless tmp
+ buf.put_bytes(0, tmp)
+ tmp.length
+ end
+
+ end
+end
+
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library.rb
new file mode 100644
index 0000000..e47da16
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library.rb
@@ -0,0 +1,576 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+require 'ffi/dynamic_library'
+
+module FFI
+ CURRENT_PROCESS = USE_THIS_PROCESS_AS_LIBRARY = FFI.make_shareable(Object.new)
+
+ # @param [String, FFI::LibraryPath] lib library name or LibraryPath object
+ # @return [String] library name formatted for current platform
+ # Transform a generic library name to a platform library name
+ # @example
+ # # Linux
+ # FFI.map_library_name 'c' # -> "libc.so.6"
+ # FFI.map_library_name 'jpeg' # -> "libjpeg.so"
+ # # Windows
+ # FFI.map_library_name 'c' # -> "msvcrt.dll"
+ # FFI.map_library_name 'jpeg' # -> "jpeg.dll"
+ def self.map_library_name(lib)
+ # Mangle the library name to reflect the native library naming conventions
+ LibraryPath.wrap(lib).to_s
+ end
+
+ # Exception raised when a function is not found in libraries
+ class NotFoundError < LoadError
+ def initialize(function, *libraries)
+ super("Function '#{function}' not found in [#{libraries[0].nil? ? 'current process' : libraries.join(", ")}]")
+ end
+ end
+
+ # This module is the base to use native functions.
+ #
+ # A basic usage may be:
+ # require 'ffi'
+ #
+ # module Hello
+ # extend FFI::Library
+ # ffi_lib FFI::Library::LIBC
+ # attach_function 'puts', [ :string ], :int
+ # end
+ #
+ # Hello.puts("Hello, World")
+ #
+ #
+ module Library
+ CURRENT_PROCESS = FFI::CURRENT_PROCESS
+ LIBC = FFI::Platform::LIBC
+
+ # @param mod extended object
+ # @return [nil]
+ # @raise {RuntimeError} if +mod+ is not a Module
+ # Test if extended object is a Module. If not, raise RuntimeError.
+ def self.extended(mod)
+ raise RuntimeError.new("must only be extended by module") unless mod.kind_of?(::Module)
+ end
+
+
+ # @param [Array] names names of libraries to load
+ # @return [Array<DynamicLibrary>]
+ # @raise {LoadError} if a library cannot be opened
+ # Load native libraries.
+ def ffi_lib(*names)
+ raise LoadError.new("library names list must not be empty") if names.empty?
+
+ lib_flags = defined?(@ffi_lib_flags) && @ffi_lib_flags
+
+ @ffi_libs = names.map do |name|
+ FFI::DynamicLibrary.send(:load_library, name, lib_flags)
+ end
+ end
+
+ # Set the calling convention for {#attach_function} and {#callback}
+ #
+ # @see http://en.wikipedia.org/wiki/Stdcall#stdcall
+ # @note +:stdcall+ is typically used for attaching Windows API functions
+ #
+ # @param [Symbol] convention one of +:default+, +:stdcall+
+ # @return [Symbol] the new calling convention
+ def ffi_convention(convention = nil)
+ @ffi_convention ||= :default
+ @ffi_convention = convention if convention
+ @ffi_convention
+ end
+
+ # @see #ffi_lib
+ # @return [Array<FFI::DynamicLibrary>] array of currently loaded FFI libraries
+ # @raise [LoadError] if no libraries have been loaded (using {#ffi_lib})
+ # Get FFI libraries loaded using {#ffi_lib}.
+ def ffi_libraries
+ raise LoadError.new("no library specified") if !defined?(@ffi_libs) || @ffi_libs.empty?
+ @ffi_libs
+ end
+
+ # Flags used in {#ffi_lib}.
+ #
+ # This map allows you to supply symbols to {#ffi_lib_flags} instead of
+ # the actual constants.
+ FlagsMap = {
+ :global => DynamicLibrary::RTLD_GLOBAL,
+ :local => DynamicLibrary::RTLD_LOCAL,
+ :lazy => DynamicLibrary::RTLD_LAZY,
+ :now => DynamicLibrary::RTLD_NOW
+ }
+
+ # Sets library flags for {#ffi_lib}.
+ #
+ # @example
+ # ffi_lib_flags(:lazy, :local) # => 5
+ #
+ # @param [Symbol, …] flags (see {FlagsMap})
+ # @return [Integer] the new value
+ def ffi_lib_flags(*flags)
+ @ffi_lib_flags = flags.inject(0) { |result, f| result | FlagsMap[f] }
+ end
+
+
+ ##
+ # @overload attach_function(func, args, returns, options = {})
+ # @example attach function without an explicit name
+ # module Foo
+ # extend FFI::Library
+ # ffi_lib FFI::Library::LIBC
+ # attach_function :malloc, [:size_t], :pointer
+ # end
+ # # now callable via Foo.malloc
+ # @overload attach_function(name, func, args, returns, options = {})
+ # @example attach function with an explicit name
+ # module Bar
+ # extend FFI::Library
+ # ffi_lib FFI::Library::LIBC
+ # attach_function :c_malloc, :malloc, [:size_t], :pointer
+ # end
+ # # now callable via Bar.c_malloc
+ #
+ # Attach C function +func+ to this module.
+ #
+ #
+ # @param [#to_s] name name of ruby method to attach as
+ # @param [#to_s] func name of C function to attach
+ # @param [Array<Symbol>] args an array of types
+ # @param [Symbol] returns type of return value
+ # @option options [Boolean] :blocking (@blocking) set to true if the C function is a blocking call
+ # @option options [Symbol] :convention (:default) calling convention (see {#ffi_convention})
+ # @option options [FFI::Enums] :enums
+ # @option options [Hash] :type_map
+ #
+ # @return [FFI::VariadicInvoker]
+ #
+ # @raise [FFI::NotFoundError] if +func+ cannot be found in the attached libraries (see {#ffi_lib})
+ def attach_function(name, func, args, returns = nil, options = nil)
+ mname, a2, a3, a4, a5 = name, func, args, returns, options
+ cname, arg_types, ret_type, opts = (a4 && (a2.is_a?(String) || a2.is_a?(Symbol))) ? [ a2, a3, a4, a5 ] : [ mname.to_s, a2, a3, a4 ]
+
+ # Convert :foo to the native type
+ arg_types = arg_types.map { |e| find_type(e) }
+ options = {
+ :convention => ffi_convention,
+ :type_map => defined?(@ffi_typedefs) ? @ffi_typedefs : nil,
+ :blocking => defined?(@blocking) && @blocking,
+ :enums => defined?(@ffi_enums) ? @ffi_enums : nil,
+ }
+
+ @blocking = false
+ options.merge!(opts) if opts && opts.is_a?(Hash)
+
+ # Try to locate the function in any of the libraries
+ invokers = []
+ ffi_libraries.each do |lib|
+ if invokers.empty?
+ begin
+ function = nil
+ function_names(cname, arg_types).find do |fname|
+ function = lib.find_function(fname)
+ end
+ raise LoadError unless function
+
+ invokers << if arg_types[-1] == FFI::NativeType::VARARGS
+ VariadicInvoker.new(function, arg_types, find_type(ret_type), options)
+
+ else
+ Function.new(find_type(ret_type), arg_types, function, options)
+ end
+
+ rescue LoadError
+ end
+ end
+ end
+ invoker = invokers.compact.shift
+ raise FFI::NotFoundError.new(cname.to_s, ffi_libraries.map { |lib| lib.name }) unless invoker
+
+ invoker.attach(self, mname.to_s)
+ invoker
+ end
+
+ # @param [#to_s] name function name
+ # @param [Array] arg_types function's argument types
+ # @return [Array<String>]
+ # This function returns a list of possible names to lookup.
+ # @note Function names on windows may be decorated if they are using stdcall. See
+ # * http://en.wikipedia.org/wiki/Name_mangling#C_name_decoration_in_Microsoft_Windows
+ # * http://msdn.microsoft.com/en-us/library/zxk0tw93%28v=VS.100%29.aspx
+ # * http://en.wikibooks.org/wiki/X86_Disassembly/Calling_Conventions#STDCALL
+ # Note that decorated names can be overridden via def files. Also note that the
+ # windows api, although using, doesn't have decorated names.
+ def function_names(name, arg_types)
+ result = [name.to_s]
+ if ffi_convention == :stdcall
+ # Get the size of each parameter
+ size = arg_types.inject(0) do |mem, arg|
+ size = arg.size
+ # The size must be a multiple of 4
+ size += (4 - size) % 4
+ mem + size
+ end
+
+ result << "_#{name.to_s}@#{size}" # win32
+ result << "#{name.to_s}@#{size}" # win64
+ end
+ result
+ end
+
+ # @overload attach_variable(mname, cname, type)
+ # @param [#to_s] mname name of ruby method to attach as
+ # @param [#to_s] cname name of C variable to attach
+ # @param [DataConverter, Struct, Symbol, Type] type C variable's type
+ # @example
+ # module Bar
+ # extend FFI::Library
+ # ffi_lib 'my_lib'
+ # attach_variable :c_myvar, :myvar, :long
+ # end
+ # # now callable via Bar.c_myvar
+ # @overload attach_variable(cname, type)
+ # @param [#to_s] mname name of ruby method to attach as
+ # @param [DataConverter, Struct, Symbol, Type] type C variable's type
+ # @example
+ # module Bar
+ # extend FFI::Library
+ # ffi_lib 'my_lib'
+ # attach_variable :myvar, :long
+ # end
+ # # now callable via Bar.myvar
+ # @return [DynamicLibrary::Symbol]
+ # @raise {FFI::NotFoundError} if +cname+ cannot be found in libraries
+ #
+ # Attach C variable +cname+ to this module.
+ def attach_variable(mname, a1, a2 = nil)
+ cname, type = a2 ? [ a1, a2 ] : [ mname.to_s, a1 ]
+ mname = mname.to_sym
+ address = nil
+ ffi_libraries.each do |lib|
+ begin
+ address = lib.find_variable(cname.to_s)
+ break unless address.nil?
+ rescue LoadError
+ end
+ end
+
+ raise FFI::NotFoundError.new(cname, ffi_libraries) if address.nil? || address.null?
+ if type.is_a?(Class) && type < FFI::Struct
+ # If it is a global struct, just attach directly to the pointer
+ s = s = type.new(address) # Assigning twice to suppress unused variable warning
+ self.module_eval <<-code, __FILE__, __LINE__
+ @ffi_gsvars = {} unless defined?(@ffi_gsvars)
+ @ffi_gsvars[#{mname.inspect}] = s
+ def self.#{mname}
+ @ffi_gsvars[#{mname.inspect}]
+ end
+ code
+
+ else
+ sc = Class.new(FFI::Struct)
+ sc.layout :gvar, find_type(type)
+ s = sc.new(address)
+ #
+ # Attach to this module as mname/mname=
+ #
+ self.module_eval <<-code, __FILE__, __LINE__
+ @ffi_gvars = {} unless defined?(@ffi_gvars)
+ @ffi_gvars[#{mname.inspect}] = s
+ def self.#{mname}
+ @ffi_gvars[#{mname.inspect}][:gvar]
+ end
+ def self.#{mname}=(value)
+ @ffi_gvars[#{mname.inspect}][:gvar] = value
+ end
+ code
+
+ end
+
+ address
+ end
+
+
+ # @overload callback(name, params, ret)
+ # @param name callback name to add to type map
+ # @param [Array] params array of parameters' types
+ # @param [DataConverter, Struct, Symbol, Type] ret callback return type
+ # @overload callback(params, ret)
+ # @param [Array] params array of parameters' types
+ # @param [DataConverter, Struct, Symbol, Type] ret callback return type
+ # @return [FFI::CallbackInfo]
+ def callback(*args)
+ raise ArgumentError, "wrong number of arguments" if args.length < 2 || args.length > 3
+ name, params, ret = if args.length == 3
+ args
+ else
+ [ nil, args[0], args[1] ]
+ end
+
+ native_params = params.map { |e| find_type(e) }
+ raise ArgumentError, "callbacks cannot have variadic parameters" if native_params.include?(FFI::Type::VARARGS)
+ options = Hash.new
+ options[:convention] = ffi_convention
+ options[:enums] = @ffi_enums if defined?(@ffi_enums)
+ ret_type = find_type(ret)
+ if ret_type == Type::STRING
+ raise TypeError, ":string is not allowed as return type of callbacks"
+ end
+ cb = FFI::CallbackInfo.new(ret_type, native_params, options)
+
+ # Add to the symbol -> type map (unless there was no name)
+ unless name.nil?
+ typedef cb, name
+ end
+
+ cb
+ end
+
+ # Register or get an already registered type definition.
+ #
+ # To register a new type definition, +old+ should be a {FFI::Type}. +add+
+ # is in this case the type definition.
+ #
+ # If +old+ is a {DataConverter}, a {Type::Mapped} is returned.
+ #
+ # If +old+ is +:enum+
+ # * and +add+ is an +Array+, a call to {#enum} is made with +add+ as single parameter;
+ # * in others cases, +info+ is used to create a named enum.
+ #
+ # If +old+ is a key for type map, #typedef get +old+ type definition.
+ #
+ # @param [DataConverter, Symbol, Type] old
+ # @param [Symbol] add
+ # @param [Symbol] info
+ # @return [FFI::Enum, FFI::Type]
+ def typedef(old, add, info=nil)
+ @ffi_typedefs = Hash.new unless defined?(@ffi_typedefs)
+
+ @ffi_typedefs[add] = if old.kind_of?(FFI::Type)
+ old
+
+ elsif @ffi_typedefs.has_key?(old)
+ @ffi_typedefs[old]
+
+ elsif old.is_a?(DataConverter)
+ FFI::Type::Mapped.new(old)
+
+ elsif old == :enum
+ if add.kind_of?(Array)
+ self.enum(add)
+ else
+ self.enum(info, add)
+ end
+
+ else
+ FFI.find_type(old)
+ end
+ end
+
+ # @param [DataConverter, Type, Struct, Symbol] t type to find
+ # @return [Type]
+ # Find a type definition.
+ def find_type(t)
+ if t.kind_of?(Type)
+ t
+
+ elsif defined?(@ffi_typedefs) && @ffi_typedefs.has_key?(t)
+ @ffi_typedefs[t]
+
+ elsif t.is_a?(Class) && t < Struct
+ Type::POINTER
+
+ elsif t.is_a?(DataConverter)
+ # Add a typedef so next time the converter is used, it hits the cache
+ typedef Type::Mapped.new(t), t
+
+ end || FFI.find_type(t)
+ end
+
+ private
+ # Generic enum builder
+ # @param [Class] klass can be one of FFI::Enum or FFI::Bitmask
+ # @param args (see #enum or #bitmask)
+ def generic_enum(klass, *args)
+ native_type = args.first.kind_of?(FFI::Type) ? args.shift : nil
+ name, values = if args[0].kind_of?(Symbol) && args[1].kind_of?(Array)
+ [ args[0], args[1] ]
+ elsif args[0].kind_of?(Array)
+ [ nil, args[0] ]
+ else
+ [ nil, args ]
+ end
+ @ffi_enums = FFI::Enums.new unless defined?(@ffi_enums)
+ @ffi_enums << (e = native_type ? klass.new(native_type, values, name) : klass.new(values, name))
+
+ # If called with a name, add a typedef alias
+ typedef(e, name) if name
+ e
+ end
+
+ public
+ # @overload enum(name, values)
+ # Create a named enum.
+ # @example
+ # enum :foo, [:zero, :one, :two] # named enum
+ # @param [Symbol] name name for new enum
+ # @param [Array] values values for enum
+ # @overload enum(*args)
+ # Create an unnamed enum.
+ # @example
+ # enum :zero, :one, :two # unnamed enum
+ # @param args values for enum
+ # @overload enum(values)
+ # Create an unnamed enum.
+ # @example
+ # enum [:zero, :one, :two] # unnamed enum, equivalent to above example
+ # @param [Array] values values for enum
+ # @overload enum(native_type, name, values)
+ # Create a named enum and specify the native type.
+ # @example
+ # enum FFI::Type::UINT64, :foo, [:zero, :one, :two] # named enum
+ # @param [FFI::Type] native_type native type for new enum
+ # @param [Symbol] name name for new enum
+ # @param [Array] values values for enum
+ # @overload enum(native_type, *args)
+ # Create an unnamed enum and specify the native type.
+ # @example
+ # enum FFI::Type::UINT64, :zero, :one, :two # unnamed enum
+ # @param [FFI::Type] native_type native type for new enum
+ # @param args values for enum
+ # @overload enum(native_type, values)
+ # Create an unnamed enum and specify the native type.
+ # @example
+ # enum Type::UINT64, [:zero, :one, :two] # unnamed enum, equivalent to above example
+ # @param [FFI::Type] native_type native type for new enum
+ # @param [Array] values values for enum
+ # @return [FFI::Enum]
+ # Create a new {FFI::Enum}.
+ def enum(*args)
+ generic_enum(FFI::Enum, *args)
+ end
+
+ # @overload bitmask(name, values)
+ # Create a named bitmask
+ # @example
+ # bitmask :foo, [:red, :green, :blue] # bits 0,1,2 are used
+ # bitmask :foo, [:red, :green, 5, :blue] # bits 0,5,6 are used
+ # @param [Symbol] name for new bitmask
+ # @param [Array<Symbol, Integer>] values for new bitmask
+ # @overload bitmask(*args)
+ # Create an unamed bitmask
+ # @example
+ # bm = bitmask :red, :green, :blue # bits 0,1,2 are used
+ # bm = bitmask :red, :green, 5, blue # bits 0,5,6 are used
+ # @param [Symbol, Integer] args values for new bitmask
+ # @overload bitmask(values)
+ # Create an unamed bitmask
+ # @example
+ # bm = bitmask [:red, :green, :blue] # bits 0,1,2 are used
+ # bm = bitmask [:red, :green, 5, blue] # bits 0,5,6 are used
+ # @param [Array<Symbol, Integer>] values for new bitmask
+ # @overload bitmask(native_type, name, values)
+ # Create a named enum and specify the native type.
+ # @example
+ # bitmask FFI::Type::UINT64, :foo, [:red, :green, :blue]
+ # @param [FFI::Type] native_type native type for new bitmask
+ # @param [Symbol] name for new bitmask
+ # @param [Array<Symbol, Integer>] values for new bitmask
+ # @overload bitmask(native_type, *args)
+ # @example
+ # bitmask FFI::Type::UINT64, :red, :green, :blue
+ # @param [FFI::Type] native_type native type for new bitmask
+ # @param [Symbol, Integer] args values for new bitmask
+ # @overload bitmask(native_type, values)
+ # Create a named enum and specify the native type.
+ # @example
+ # bitmask FFI::Type::UINT64, [:red, :green, :blue]
+ # @param [FFI::Type] native_type native type for new bitmask
+ # @param [Array<Symbol, Integer>] values for new bitmask
+ # @return [FFI::Bitmask]
+ # Create a new FFI::Bitmask
+ def bitmask(*args)
+ generic_enum(FFI::Bitmask, *args)
+ end
+
+ # @param name
+ # @return [FFI::Enum]
+ # Find an enum by name.
+ def enum_type(name)
+ @ffi_enums.find(name) if defined?(@ffi_enums)
+ end
+
+ # @param symbol
+ # @return [FFI::Enum]
+ # Find an enum by a symbol it contains.
+ def enum_value(symbol)
+ @ffi_enums.__map_symbol(symbol)
+ end
+
+ # Retrieve all attached functions and their function signature
+ #
+ # This method returns a Hash of method names of attached functions connected by #attach_function and the corresponding function type.
+ # The function type responds to #return_type and #param_types which return the FFI types of the function signature.
+ #
+ # @return [Hash< Symbol => [FFI::Function, FFI::VariadicInvoker] >]
+ def attached_functions
+ @ffi_functions || {}
+ end
+
+ # Retrieve all attached variables and their type
+ #
+ # This method returns a Hash of variable names and the corresponding type or variables connected by #attach_variable .
+ #
+ # @return [Hash< Symbol => ffi_type >]
+ def attached_variables
+ (
+ (defined?(@ffi_gsvars) ? @ffi_gsvars : {}).map do |name, gvar|
+ [name, gvar.class]
+ end +
+ (defined?(@ffi_gvars) ? @ffi_gvars : {}).map do |name, gvar|
+ [name, gvar.layout[:gvar].type]
+ end
+ ).to_h
+ end
+
+ # Freeze all definitions of the module
+ #
+ # This freezes the module's definitions, so that it can be used in a Ractor.
+ # No further methods or variables can be attached and no further enums or typedefs can be created in this module afterwards.
+ def freeze
+ instance_variables.each do |name|
+ var = instance_variable_get(name)
+ FFI.make_shareable(var)
+ end
+ nil
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library_path.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library_path.rb
new file mode 100644
index 0000000..5575a5f
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/library_path.rb
@@ -0,0 +1,109 @@
+#
+# Copyright (C) 2023 Lars Kanis
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+module FFI
+ # Transform a generic library name and ABI number to a platform library name
+ #
+ # Example:
+ # module LibVips
+ # extend FFI::Library
+ # ffi_lib LibraryPath.new("vips", abi_number: 42)
+ # end
+ #
+ # This translates to the following library file names:
+ # libvips-42.dll on Windows
+ # libvips.so.42 on Linux
+ # libvips.42.dylib on Macos
+ #
+ # See https://packaging.ubuntu.com/html/libraries.html for more information about library naming.
+ class LibraryPath
+ attr_reader :name
+ attr_reader :abi_number
+ attr_reader :root
+
+ # Build a new library path
+ #
+ # * <tt>name</tt> : The name of the library without file prefix or suffix.
+ # * <tt>abi_number</tt> : The ABI number of the library.
+ # * <tt>root</tt> : An optional base path prepended to the library name.
+ def initialize(name, abi_number: nil, root: nil)
+ @name = name
+ @abi_number = abi_number
+ @root = root
+ end
+
+ def self.wrap(value)
+ # We allow instances of LibraryPath to pass through transparently:
+ return value if value.is_a?(self)
+
+ # We special case a library named 'c' to be the standard C library:
+ return Library::LIBC if value == 'c'
+
+ # If provided a relative file name we convert it into a library path:
+ if value && File.basename(value) == value
+ return self.new(value)
+ end
+
+ # Otherwise, we assume it's a full path to a library:
+ return value
+ end
+
+ def full_name
+ # If the abi_number is given, we format it specifically according to platform rules:
+ if abi_number
+ if Platform.windows?
+ "#{Platform::LIBPREFIX}#{name}-#{abi_number}.#{Platform::LIBSUFFIX}"
+ elsif Platform.mac?
+ "#{Platform::LIBPREFIX}#{name}.#{abi_number}.#{Platform::LIBSUFFIX}"
+ else # Linux? BSD? etc.
+ "#{Platform::LIBPREFIX}#{name}.#{Platform::LIBSUFFIX}.#{abi_number}"
+ end
+ else
+ # Otherwise we just add prefix and suffix:
+ lib = name
+ # Add library prefix if missing
+ lib = Platform::LIBPREFIX + lib unless lib =~ /^#{Platform::LIBPREFIX}/
+ # Add library extension if missing
+ r = Platform.windows? || Platform.mac? ? "\\.#{Platform::LIBSUFFIX}$" : "\\.so($|\\.[1234567890]+)"
+ lib += ".#{Platform::LIBSUFFIX}" unless lib =~ /#{r}/
+ lib
+ end
+ end
+
+ def to_s
+ if root
+ # If the root path is given, we generate the full path:
+ File.join(root, full_name)
+ else
+ full_name
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/managedstruct.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/managedstruct.rb
new file mode 100644
index 0000000..5d243e5
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/managedstruct.rb
@@ -0,0 +1,84 @@
+# Copyright (C) 2008 Mike Dalessio
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+module FFI
+ #
+ # FFI::ManagedStruct allows custom garbage-collection of your FFI::Structs.
+ #
+ # The typical use case would be when interacting with a library
+ # that has a nontrivial memory management design, such as a linked
+ # list or a binary tree.
+ #
+ # When the {Struct} instance is garbage collected, FFI::ManagedStruct will
+ # invoke the class's release() method during object finalization.
+ #
+ # @example Example usage:
+ # module MyLibrary
+ # ffi_lib "libmylibrary"
+ # attach_function :new_dlist, [], :pointer
+ # attach_function :destroy_dlist, [:pointer], :void
+ # end
+ #
+ # class DoublyLinkedList < FFI::ManagedStruct
+ # @@@
+ # struct do |s|
+ # s.name 'struct dlist'
+ # s.include 'dlist.h'
+ # s.field :head, :pointer
+ # s.field :tail, :pointer
+ # end
+ # @@@
+ #
+ # def self.release ptr
+ # MyLibrary.destroy_dlist(ptr)
+ # end
+ # end
+ #
+ # begin
+ # ptr = DoublyLinkedList.new(MyLibrary.new_dlist)
+ # # do something with the list
+ # end
+ # # struct is out of scope, and will be GC'd using DoublyLinkedList#release
+ #
+ #
+ class ManagedStruct < FFI::Struct
+
+ # @overload initialize(pointer)
+ # @param [Pointer] pointer
+ # Create a new ManagedStruct which will invoke the class method #release on
+ # @overload initialize
+ # A new instance of FFI::ManagedStruct.
+ def initialize(pointer=nil)
+ raise NoMethodError, "release() not implemented for class #{self}" unless self.class.respond_to?(:release, true)
+ raise ArgumentError, "Must supply a pointer to memory for the Struct" unless pointer
+ super AutoPointer.new(pointer, self.class.method(:release))
+ end
+
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/memorypointer.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/memorypointer.rb
new file mode 100644
index 0000000..9f07bc6
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/memorypointer.rb
@@ -0,0 +1 @@
+# This class is now implemented in C
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform.rb
new file mode 100644
index 0000000..5ac4dd7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform.rb
@@ -0,0 +1,187 @@
+#
+# Copyright (C) 2008, 2009 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+require 'rbconfig'
+require_relative 'compat'
+
+module FFI
+ class PlatformError < LoadError; end
+
+ # This module defines different constants and class methods to play with
+ # various platforms.
+ module Platform
+ OS = FFI.make_shareable(case RbConfig::CONFIG['host_os'].downcase
+ when /linux/
+ "linux"
+ when /darwin/
+ "darwin"
+ when /freebsd/
+ "freebsd"
+ when /netbsd/
+ "netbsd"
+ when /openbsd/
+ "openbsd"
+ when /dragonfly/
+ "dragonflybsd"
+ when /sunos|solaris/
+ "solaris"
+ when /mingw|mswin/
+ "windows"
+ else
+ RbConfig::CONFIG['host_os'].downcase
+ end)
+
+ OSVERSION = RbConfig::CONFIG['host_os'].gsub(/[^\d]/, '').to_i
+
+ CPU = FFI.make_shareable(RbConfig::CONFIG['host_cpu'])
+
+ ARCH = FFI.make_shareable(case CPU.downcase
+ when /amd64|x86_64|x64/
+ "x86_64"
+ when /i\d86|x86|i86pc/
+ "i386"
+ when /ppc64|powerpc64/
+ "powerpc64"
+ when /ppc|powerpc/
+ "powerpc"
+ when /sparcv9|sparc64/
+ "sparcv9"
+ when /arm64|aarch64/ # MacOS calls it "arm64", other operating systems "aarch64"
+ "aarch64"
+ when /^arm/
+ if OS == "darwin" # Ruby before 3.0 reports "arm" instead of "arm64" as host_cpu on darwin
+ "aarch64"
+ else
+ "arm"
+ end
+ else
+ RbConfig::CONFIG['host_cpu']
+ end)
+
+ private
+ # @param [String) os
+ # @return [Boolean]
+ # Test if current OS is +os+.
+ def self.is_os(os)
+ OS == os
+ end
+
+ IS_GNU = defined?(GNU_LIBC)
+ IS_LINUX = is_os("linux")
+ IS_MAC = is_os("darwin")
+ IS_FREEBSD = is_os("freebsd")
+ IS_NETBSD = is_os("netbsd")
+ IS_OPENBSD = is_os("openbsd")
+ IS_DRAGONFLYBSD = is_os("dragonfly")
+ IS_SOLARIS = is_os("solaris")
+ IS_WINDOWS = is_os("windows")
+ IS_BSD = IS_MAC || IS_FREEBSD || IS_NETBSD || IS_OPENBSD || IS_DRAGONFLYBSD
+
+ # Add the version for known ABI breaks
+ name_version = "12" if IS_FREEBSD && OSVERSION >= 12 # 64-bit inodes
+
+ NAME = FFI.make_shareable("#{ARCH}-#{OS}#{name_version}")
+ CONF_DIR = FFI.make_shareable(File.join(File.dirname(__FILE__), 'platform', NAME))
+
+ public
+
+ LIBPREFIX = FFI.make_shareable(case OS
+ when /windows|msys/
+ ''
+ when /cygwin/
+ 'cyg'
+ else
+ 'lib'
+ end)
+
+ LIBSUFFIX = FFI.make_shareable(case OS
+ when /darwin/
+ 'dylib'
+ when /linux|bsd|solaris/
+ 'so'
+ when /windows|cygwin|msys/
+ 'dll'
+ else
+ # Punt and just assume a sane unix (i.e. anything but AIX)
+ 'so'
+ end)
+
+ LIBC = FFI.make_shareable(if IS_WINDOWS
+ crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase'
+ "#{crtname}.dll"
+ elsif IS_GNU
+ GNU_LIBC
+ elsif OS == 'cygwin'
+ "cygwin1.dll"
+ elsif OS == 'msys'
+ # Not sure how msys 1.0 behaves, tested on MSYS2.
+ "msys-2.0.dll"
+ else
+ "#{LIBPREFIX}c.#{LIBSUFFIX}"
+ end)
+
+ LITTLE_ENDIAN = 1234 unless defined?(LITTLE_ENDIAN)
+ BIG_ENDIAN = 4321 unless defined?(BIG_ENDIAN)
+ unless defined?(BYTE_ORDER)
+ BYTE_ORDER = [0x12345678].pack("I") == [0x12345678].pack("N") ? BIG_ENDIAN : LITTLE_ENDIAN
+ end
+
+ # Test if current OS is a *BSD (include MAC)
+ # @return [Boolean]
+ def self.bsd?
+ IS_BSD
+ end
+
+ # Test if current OS is Windows
+ # @return [Boolean]
+ def self.windows?
+ IS_WINDOWS
+ end
+
+ # Test if current OS is Mac OS
+ # @return [Boolean]
+ def self.mac?
+ IS_MAC
+ end
+
+ # Test if current OS is Solaris (Sun OS)
+ # @return [Boolean]
+ def self.solaris?
+ IS_SOLARIS
+ end
+
+ # Test if current OS is a unix OS
+ # @return [Boolean]
+ def self.unix?
+ !IS_WINDOWS
+ end
+ end
+end
+
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-darwin/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-darwin/types.conf
new file mode 100644
index 0000000..68841bb
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-darwin/types.conf
@@ -0,0 +1,130 @@
+rbx.platform.typedef.__darwin_blkcnt_t = long_long
+rbx.platform.typedef.__darwin_blksize_t = int
+rbx.platform.typedef.__darwin_clock_t = ulong
+rbx.platform.typedef.__darwin_ct_rune_t = int
+rbx.platform.typedef.__darwin_dev_t = int
+rbx.platform.typedef.__darwin_fsblkcnt_t = uint
+rbx.platform.typedef.__darwin_fsfilcnt_t = uint
+rbx.platform.typedef.__darwin_gid_t = uint
+rbx.platform.typedef.__darwin_id_t = uint
+rbx.platform.typedef.__darwin_ino64_t = ulong_long
+rbx.platform.typedef.__darwin_ino_t = ulong_long
+rbx.platform.typedef.__darwin_intptr_t = long
+rbx.platform.typedef.__darwin_mach_port_name_t = uint
+rbx.platform.typedef.__darwin_mach_port_t = uint
+rbx.platform.typedef.__darwin_mode_t = ushort
+rbx.platform.typedef.__darwin_natural_t = uint
+rbx.platform.typedef.__darwin_off_t = long_long
+rbx.platform.typedef.__darwin_pid_t = int
+rbx.platform.typedef.__darwin_pthread_key_t = ulong
+rbx.platform.typedef.__darwin_ptrdiff_t = long
+rbx.platform.typedef.__darwin_rune_t = int
+rbx.platform.typedef.__darwin_sigset_t = uint
+rbx.platform.typedef.__darwin_size_t = ulong
+rbx.platform.typedef.__darwin_socklen_t = uint
+rbx.platform.typedef.__darwin_ssize_t = long
+rbx.platform.typedef.__darwin_suseconds_t = int
+rbx.platform.typedef.__darwin_time_t = long
+rbx.platform.typedef.__darwin_uid_t = uint
+rbx.platform.typedef.__darwin_useconds_t = uint
+rbx.platform.typedef.__darwin_uuid_string_t[37] = char
+rbx.platform.typedef.__darwin_uuid_t[16] = uchar
+rbx.platform.typedef.__darwin_wchar_t = int
+rbx.platform.typedef.__darwin_wint_t = int
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.errno_t = int
+rbx.platform.typedef.fd_mask = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = uint
+rbx.platform.typedef.fsfilcnt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = short
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ushort
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long_long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.rsize_t = ulong
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.sae_associd_t = uint
+rbx.platform.typedef.sae_connid_t = uint
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.syscall_arg_t = ulong_long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ushort
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.user_addr_t = ulong_long
+rbx.platform.typedef.user_long_t = long_long
+rbx.platform.typedef.user_off_t = long_long
+rbx.platform.typedef.user_size_t = ulong_long
+rbx.platform.typedef.user_ssize_t = long_long
+rbx.platform.typedef.user_time_t = long_long
+rbx.platform.typedef.user_ulong_t = ulong_long
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd/types.conf
new file mode 100644
index 0000000..8d111e0
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd/types.conf
@@ -0,0 +1,128 @@
+rbx.platform.typedef.__clock_t = int
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = int
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = uint
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long_long
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr64_t = long_long
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long_long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd12/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd12/types.conf
new file mode 100644
index 0000000..3ccb8f6
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-freebsd12/types.conf
@@ -0,0 +1,181 @@
+rbx.platform.typedef.*) = pointer
+rbx.platform.typedef.___wchar_t = uint
+rbx.platform.typedef.__accmode_t = int
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__char16_t = ushort
+rbx.platform.typedef.__char32_t = uint
+rbx.platform.typedef.__clock_t = int
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpulevel_t = int
+rbx.platform.typedef.__cpusetid_t = int
+rbx.platform.typedef.__cpuwhich_t = int
+rbx.platform.typedef.__critical_t = long
+rbx.platform.typedef.__ct_rune_t = int
+rbx.platform.typedef.__daddr_t = long
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = ulong
+rbx.platform.typedef.__fflags_t = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intfptr_t = long
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__lwpid_t = int
+rbx.platform.typedef.__mode_t = ushort
+rbx.platform.typedef.__nl_item = int
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long
+rbx.platform.typedef.__rlim_t = long
+rbx.platform.typedef.__rman_res_t = ulong
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = long
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__u_register_t = ulong
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintfptr_t = ulong
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vm_offset_t = ulong
+rbx.platform.typedef.__vm_paddr_t = ulong
+rbx.platform.typedef.__vm_size_t = ulong
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.accmode_t = int
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.c_caddr_t = pointer
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.cap_ioctl_t = ulong
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpulevel_t = int
+rbx.platform.typedef.cpusetid_t = int
+rbx.platform.typedef.cpuwhich_t = int
+rbx.platform.typedef.critical_t = long
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = ulong
+rbx.platform.typedef.fflags_t = uint
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = int
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.kpaddr_t = ulong
+rbx.platform.typedef.ksize_t = ulong
+rbx.platform.typedef.kssize_t = long
+rbx.platform.typedef.kvaddr_t = ulong
+rbx.platform.typedef.lwpid_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off64_t = long
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = long
+rbx.platform.typedef.rman_res_t = ulong
+rbx.platform.typedef.rsize_t = ulong
+rbx.platform.typedef.rune_t = int
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.sbintime_t = long
+rbx.platform.typedef.segsz_t = long
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_register_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uint
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vm_offset_t = ulong
+rbx.platform.typedef.vm_ooffset_t = ulong
+rbx.platform.typedef.vm_paddr_t = ulong
+rbx.platform.typedef.vm_pindex_t = ulong
+rbx.platform.typedef.vm_size_t = ulong
+rbx.platform.typedef.wchar_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-linux/types.conf
new file mode 100644
index 0000000..c56206e
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-linux/types.conf
@@ -0,0 +1,175 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__kernel_caddr_t = string
+rbx.platform.typedef.__kernel_clock_t = long
+rbx.platform.typedef.__kernel_clockid_t = int
+rbx.platform.typedef.__kernel_daddr_t = int
+rbx.platform.typedef.__kernel_gid16_t = ushort
+rbx.platform.typedef.__kernel_gid32_t = uint
+rbx.platform.typedef.__kernel_gid_t = uint
+rbx.platform.typedef.__kernel_ino_t = ulong
+rbx.platform.typedef.__kernel_ipc_pid_t = int
+rbx.platform.typedef.__kernel_key_t = int
+rbx.platform.typedef.__kernel_loff_t = long_long
+rbx.platform.typedef.__kernel_long_t = long
+rbx.platform.typedef.__kernel_mode_t = uint
+rbx.platform.typedef.__kernel_mqd_t = int
+rbx.platform.typedef.__kernel_off_t = long
+rbx.platform.typedef.__kernel_old_dev_t = uint
+rbx.platform.typedef.__kernel_old_gid_t = ushort
+rbx.platform.typedef.__kernel_old_time_t = long
+rbx.platform.typedef.__kernel_old_uid_t = ushort
+rbx.platform.typedef.__kernel_pid_t = int
+rbx.platform.typedef.__kernel_ptrdiff_t = long
+rbx.platform.typedef.__kernel_size_t = ulong
+rbx.platform.typedef.__kernel_ssize_t = long
+rbx.platform.typedef.__kernel_suseconds_t = long
+rbx.platform.typedef.__kernel_time64_t = long_long
+rbx.platform.typedef.__kernel_time_t = long
+rbx.platform.typedef.__kernel_timer_t = int
+rbx.platform.typedef.__kernel_uid16_t = ushort
+rbx.platform.typedef.__kernel_uid32_t = uint
+rbx.platform.typedef.__kernel_uid_t = uint
+rbx.platform.typedef.__kernel_ulong_t = ulong
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds64_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__thrd_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__tss_t = uint
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = long
+rbx.platform.typedef.int_fast32_t = long
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ulong
+rbx.platform.typedef.uint_fast32_t = ulong
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-openbsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-openbsd/types.conf
new file mode 100644
index 0000000..6abc9c0
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-openbsd/types.conf
@@ -0,0 +1,134 @@
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long_long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = ulong_long
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = long_long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = long_long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.sigset_t = uint
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = long_long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-windows/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-windows/types.conf
new file mode 100644
index 0000000..5bdbbde
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/aarch64-windows/types.conf
@@ -0,0 +1,52 @@
+rbx.platform.typedef.__time32_t = long
+rbx.platform.typedef.__time64_t = long_long
+rbx.platform.typedef._dev_t = uint
+rbx.platform.typedef._ino_t = ushort
+rbx.platform.typedef._mode_t = ushort
+rbx.platform.typedef._off64_t = long_long
+rbx.platform.typedef._off_t = long
+rbx.platform.typedef._pid_t = long_long
+rbx.platform.typedef._sigset_t = ulong_long
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.errno_t = int
+rbx.platform.typedef.ino_t = ushort
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = short
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = long_long
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.off32_t = long
+rbx.platform.typedef.off64_t = long_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = long_long
+rbx.platform.typedef.ptrdiff_t = long_long
+rbx.platform.typedef.rsize_t = ulong_long
+rbx.platform.typedef.size_t = ulong_long
+rbx.platform.typedef.ssize_t = long_long
+rbx.platform.typedef.time_t = long_long
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ushort
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = ulong_long
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.wchar_t = ushort
+rbx.platform.typedef.wctype_t = ushort
+rbx.platform.typedef.wint_t = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd/types.conf
new file mode 100644
index 0000000..cfbb90f
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd/types.conf
@@ -0,0 +1,152 @@
+
+rbx.platform.typedef.*) = pointer
+rbx.platform.typedef.__accmode_t = int
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = uint
+rbx.platform.typedef.__clock_t = ulong
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpulevel_t = int
+rbx.platform.typedef.__cpumask_t = uint
+rbx.platform.typedef.__cpusetid_t = int
+rbx.platform.typedef.__cpuwhich_t = int
+rbx.platform.typedef.__critical_t = int
+rbx.platform.typedef.__ct_rune_t = int
+rbx.platform.typedef.__dev_t = uint
+rbx.platform.typedef.__fd_mask = ulong
+rbx.platform.typedef.__fflags_t = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = long_long
+rbx.platform.typedef.__ino_t = uint
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intfptr_t = int
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__lwpid_t = int
+rbx.platform.typedef.__mode_t = ushort
+rbx.platform.typedef.__nl_item = int
+rbx.platform.typedef.__nlink_t = ushort
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__ptrdiff_t = int
+rbx.platform.typedef.__register_t = int
+rbx.platform.typedef.__rlim_t = long_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = uint
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = int
+rbx.platform.typedef.__u_register_t = uint
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintfptr_t = uint
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = uint
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vm_offset_t = uint
+rbx.platform.typedef.__vm_ooffset_t = long_long
+rbx.platform.typedef.__vm_paddr_t = uint
+rbx.platform.typedef.__vm_pindex_t = ulong_long
+rbx.platform.typedef.__vm_size_t = uint
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.accmode_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = uint
+rbx.platform.typedef.c_caddr_t = pointer
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpulevel_t = int
+rbx.platform.typedef.cpumask_t = uint
+rbx.platform.typedef.cpusetid_t = int
+rbx.platform.typedef.cpuwhich_t = int
+rbx.platform.typedef.critical_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.fd_mask = ulong
+rbx.platform.typedef.fflags_t = uint
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = long_long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.lwpid_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ushort
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = long_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_register_t = uint
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vm_offset_t = uint
+rbx.platform.typedef.vm_ooffset_t = long_long
+rbx.platform.typedef.vm_paddr_t = uint
+rbx.platform.typedef.vm_pindex_t = ulong_long
+rbx.platform.typedef.vm_size_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd12/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd12/types.conf
new file mode 100644
index 0000000..523370d
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-freebsd12/types.conf
@@ -0,0 +1,152 @@
+
+rbx.platform.typedef.*) = pointer
+rbx.platform.typedef.__accmode_t = int
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = uint
+rbx.platform.typedef.__clock_t = ulong
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpulevel_t = int
+rbx.platform.typedef.__cpumask_t = uint
+rbx.platform.typedef.__cpusetid_t = int
+rbx.platform.typedef.__cpuwhich_t = int
+rbx.platform.typedef.__critical_t = int
+rbx.platform.typedef.__ct_rune_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = ulong
+rbx.platform.typedef.__fflags_t = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = long_long
+rbx.platform.typedef.__ino_t = ulong_long
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intfptr_t = int
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__lwpid_t = int
+rbx.platform.typedef.__mode_t = ushort
+rbx.platform.typedef.__nl_item = int
+rbx.platform.typedef.__nlink_t = ulong_long
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__ptrdiff_t = int
+rbx.platform.typedef.__register_t = int
+rbx.platform.typedef.__rlim_t = long_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = uint
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = int
+rbx.platform.typedef.__u_register_t = uint
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintfptr_t = uint
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = uint
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vm_offset_t = uint
+rbx.platform.typedef.__vm_ooffset_t = long_long
+rbx.platform.typedef.__vm_paddr_t = uint
+rbx.platform.typedef.__vm_pindex_t = ulong_long
+rbx.platform.typedef.__vm_size_t = uint
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.accmode_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = uint
+rbx.platform.typedef.c_caddr_t = pointer
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpulevel_t = int
+rbx.platform.typedef.cpumask_t = uint
+rbx.platform.typedef.cpusetid_t = int
+rbx.platform.typedef.cpuwhich_t = int
+rbx.platform.typedef.critical_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = ulong
+rbx.platform.typedef.fflags_t = uint
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = long_long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.lwpid_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ulong_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = long_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_register_t = uint
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vm_offset_t = uint
+rbx.platform.typedef.vm_ooffset_t = long_long
+rbx.platform.typedef.vm_paddr_t = uint
+rbx.platform.typedef.vm_pindex_t = ulong_long
+rbx.platform.typedef.vm_size_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-linux/types.conf
new file mode 100644
index 0000000..a070d39
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/arm-linux/types.conf
@@ -0,0 +1,132 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = int
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa1.1-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa1.1-linux/types.conf
new file mode 100644
index 0000000..c8a8141
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa1.1-linux/types.conf
@@ -0,0 +1,178 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = int
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__kernel_caddr_t = string
+rbx.platform.typedef.__kernel_clock_t = long
+rbx.platform.typedef.__kernel_clockid_t = int
+rbx.platform.typedef.__kernel_daddr_t = int
+rbx.platform.typedef.__kernel_gid16_t = ushort
+rbx.platform.typedef.__kernel_gid32_t = uint
+rbx.platform.typedef.__kernel_gid_t = uint
+rbx.platform.typedef.__kernel_ino64_t = ulong_long
+rbx.platform.typedef.__kernel_ino_t = ulong
+rbx.platform.typedef.__kernel_ipc_pid_t = ushort
+rbx.platform.typedef.__kernel_key_t = int
+rbx.platform.typedef.__kernel_loff_t = long_long
+rbx.platform.typedef.__kernel_long_t = long
+rbx.platform.typedef.__kernel_mode_t = ushort
+rbx.platform.typedef.__kernel_mqd_t = int
+rbx.platform.typedef.__kernel_off64_t = long_long
+rbx.platform.typedef.__kernel_off_t = long
+rbx.platform.typedef.__kernel_old_dev_t = uint
+rbx.platform.typedef.__kernel_old_gid_t = uint
+rbx.platform.typedef.__kernel_old_time_t = long
+rbx.platform.typedef.__kernel_old_uid_t = uint
+rbx.platform.typedef.__kernel_pid_t = int
+rbx.platform.typedef.__kernel_ptrdiff_t = int
+rbx.platform.typedef.__kernel_size_t = uint
+rbx.platform.typedef.__kernel_ssize_t = int
+rbx.platform.typedef.__kernel_suseconds_t = long
+rbx.platform.typedef.__kernel_time64_t = long_long
+rbx.platform.typedef.__kernel_time_t = long
+rbx.platform.typedef.__kernel_timer_t = int
+rbx.platform.typedef.__kernel_uid16_t = ushort
+rbx.platform.typedef.__kernel_uid32_t = uint
+rbx.platform.typedef.__kernel_uid_t = uint
+rbx.platform.typedef.__kernel_ulong_t = ulong
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds64_t = long_long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__thrd_t = ulong
+rbx.platform.typedef.__time64_t = long_long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__tss_t = uint
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = long
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa2.0-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa2.0-linux/types.conf
new file mode 100644
index 0000000..c8a8141
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/hppa2.0-linux/types.conf
@@ -0,0 +1,178 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = int
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__kernel_caddr_t = string
+rbx.platform.typedef.__kernel_clock_t = long
+rbx.platform.typedef.__kernel_clockid_t = int
+rbx.platform.typedef.__kernel_daddr_t = int
+rbx.platform.typedef.__kernel_gid16_t = ushort
+rbx.platform.typedef.__kernel_gid32_t = uint
+rbx.platform.typedef.__kernel_gid_t = uint
+rbx.platform.typedef.__kernel_ino64_t = ulong_long
+rbx.platform.typedef.__kernel_ino_t = ulong
+rbx.platform.typedef.__kernel_ipc_pid_t = ushort
+rbx.platform.typedef.__kernel_key_t = int
+rbx.platform.typedef.__kernel_loff_t = long_long
+rbx.platform.typedef.__kernel_long_t = long
+rbx.platform.typedef.__kernel_mode_t = ushort
+rbx.platform.typedef.__kernel_mqd_t = int
+rbx.platform.typedef.__kernel_off64_t = long_long
+rbx.platform.typedef.__kernel_off_t = long
+rbx.platform.typedef.__kernel_old_dev_t = uint
+rbx.platform.typedef.__kernel_old_gid_t = uint
+rbx.platform.typedef.__kernel_old_time_t = long
+rbx.platform.typedef.__kernel_old_uid_t = uint
+rbx.platform.typedef.__kernel_pid_t = int
+rbx.platform.typedef.__kernel_ptrdiff_t = int
+rbx.platform.typedef.__kernel_size_t = uint
+rbx.platform.typedef.__kernel_ssize_t = int
+rbx.platform.typedef.__kernel_suseconds_t = long
+rbx.platform.typedef.__kernel_time64_t = long_long
+rbx.platform.typedef.__kernel_time_t = long
+rbx.platform.typedef.__kernel_timer_t = int
+rbx.platform.typedef.__kernel_uid16_t = ushort
+rbx.platform.typedef.__kernel_uid32_t = uint
+rbx.platform.typedef.__kernel_uid_t = uint
+rbx.platform.typedef.__kernel_ulong_t = ulong
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds64_t = long_long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__thrd_t = ulong
+rbx.platform.typedef.__time64_t = long_long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__tss_t = uint
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = long
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-cygwin/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-cygwin/types.conf
new file mode 100644
index 0000000..93f6b86
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-cygwin/types.conf
@@ -0,0 +1,3 @@
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.ssize_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-darwin/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-darwin/types.conf
new file mode 100644
index 0000000..ae100f4
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-darwin/types.conf
@@ -0,0 +1,100 @@
+rbx.platform.typedef.__darwin_blkcnt_t = long_long
+rbx.platform.typedef.__darwin_blksize_t = int
+rbx.platform.typedef.__darwin_clock_t = ulong
+rbx.platform.typedef.__darwin_ct_rune_t = int
+rbx.platform.typedef.__darwin_dev_t = int
+rbx.platform.typedef.__darwin_fsblkcnt_t = uint
+rbx.platform.typedef.__darwin_fsfilcnt_t = uint
+rbx.platform.typedef.__darwin_gid_t = uint
+rbx.platform.typedef.__darwin_id_t = uint
+rbx.platform.typedef.__darwin_ino64_t = ulong_long
+rbx.platform.typedef.__darwin_ino_t = ulong_long
+rbx.platform.typedef.__darwin_intptr_t = long
+rbx.platform.typedef.__darwin_mach_port_name_t = uint
+rbx.platform.typedef.__darwin_mach_port_t = uint
+rbx.platform.typedef.__darwin_mode_t = ushort
+rbx.platform.typedef.__darwin_natural_t = uint
+rbx.platform.typedef.__darwin_off_t = long_long
+rbx.platform.typedef.__darwin_pid_t = int
+rbx.platform.typedef.__darwin_pthread_key_t = ulong
+rbx.platform.typedef.__darwin_ptrdiff_t = int
+rbx.platform.typedef.__darwin_rune_t = int
+rbx.platform.typedef.__darwin_sigset_t = uint
+rbx.platform.typedef.__darwin_size_t = ulong
+rbx.platform.typedef.__darwin_socklen_t = uint
+rbx.platform.typedef.__darwin_ssize_t = long
+rbx.platform.typedef.__darwin_suseconds_t = int
+rbx.platform.typedef.__darwin_time_t = long
+rbx.platform.typedef.__darwin_uid_t = uint
+rbx.platform.typedef.__darwin_useconds_t = uint
+rbx.platform.typedef.__darwin_uuid_t[16] = uchar
+rbx.platform.typedef.__darwin_wchar_t = int
+rbx.platform.typedef.__darwin_wint_t = int
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fd_mask = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = uint
+rbx.platform.typedef.fsfilcnt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ushort
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.syscall_arg_t = ulong_long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.user_addr_t = ulong_long
+rbx.platform.typedef.user_long_t = long_long
+rbx.platform.typedef.user_size_t = ulong_long
+rbx.platform.typedef.user_ssize_t = long_long
+rbx.platform.typedef.user_time_t = long_long
+rbx.platform.typedef.user_ulong_t = ulong_long
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd/types.conf
new file mode 100644
index 0000000..6c882d4
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd/types.conf
@@ -0,0 +1,152 @@
+
+rbx.platform.typedef.*) = pointer
+rbx.platform.typedef.__accmode_t = int
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = uint
+rbx.platform.typedef.__clock_t = ulong
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpulevel_t = int
+rbx.platform.typedef.__cpumask_t = uint
+rbx.platform.typedef.__cpusetid_t = int
+rbx.platform.typedef.__cpuwhich_t = int
+rbx.platform.typedef.__critical_t = int
+rbx.platform.typedef.__ct_rune_t = int
+rbx.platform.typedef.__dev_t = uint
+rbx.platform.typedef.__fd_mask = ulong
+rbx.platform.typedef.__fflags_t = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = long_long
+rbx.platform.typedef.__ino_t = uint
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intfptr_t = int
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__lwpid_t = int
+rbx.platform.typedef.__mode_t = ushort
+rbx.platform.typedef.__nl_item = int
+rbx.platform.typedef.__nlink_t = ushort
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__ptrdiff_t = int
+rbx.platform.typedef.__register_t = int
+rbx.platform.typedef.__rlim_t = long_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = uint
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__u_register_t = uint
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintfptr_t = uint
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = uint
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vm_offset_t = uint
+rbx.platform.typedef.__vm_ooffset_t = long_long
+rbx.platform.typedef.__vm_paddr_t = uint
+rbx.platform.typedef.__vm_pindex_t = ulong_long
+rbx.platform.typedef.__vm_size_t = uint
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.accmode_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = uint
+rbx.platform.typedef.c_caddr_t = pointer
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpulevel_t = int
+rbx.platform.typedef.cpumask_t = uint
+rbx.platform.typedef.cpusetid_t = int
+rbx.platform.typedef.cpuwhich_t = int
+rbx.platform.typedef.critical_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.fd_mask = ulong
+rbx.platform.typedef.fflags_t = uint
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = long_long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.lwpid_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ushort
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = long_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_register_t = uint
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vm_offset_t = uint
+rbx.platform.typedef.vm_ooffset_t = long_long
+rbx.platform.typedef.vm_paddr_t = uint
+rbx.platform.typedef.vm_pindex_t = ulong_long
+rbx.platform.typedef.vm_size_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd12/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd12/types.conf
new file mode 100644
index 0000000..523370d
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-freebsd12/types.conf
@@ -0,0 +1,152 @@
+
+rbx.platform.typedef.*) = pointer
+rbx.platform.typedef.__accmode_t = int
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = uint
+rbx.platform.typedef.__clock_t = ulong
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpulevel_t = int
+rbx.platform.typedef.__cpumask_t = uint
+rbx.platform.typedef.__cpusetid_t = int
+rbx.platform.typedef.__cpuwhich_t = int
+rbx.platform.typedef.__critical_t = int
+rbx.platform.typedef.__ct_rune_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = ulong
+rbx.platform.typedef.__fflags_t = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = long_long
+rbx.platform.typedef.__ino_t = ulong_long
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intfptr_t = int
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__lwpid_t = int
+rbx.platform.typedef.__mode_t = ushort
+rbx.platform.typedef.__nl_item = int
+rbx.platform.typedef.__nlink_t = ulong_long
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__ptrdiff_t = int
+rbx.platform.typedef.__register_t = int
+rbx.platform.typedef.__rlim_t = long_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = uint
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = int
+rbx.platform.typedef.__u_register_t = uint
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintfptr_t = uint
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = uint
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vm_offset_t = uint
+rbx.platform.typedef.__vm_ooffset_t = long_long
+rbx.platform.typedef.__vm_paddr_t = uint
+rbx.platform.typedef.__vm_pindex_t = ulong_long
+rbx.platform.typedef.__vm_size_t = uint
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.accmode_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = uint
+rbx.platform.typedef.c_caddr_t = pointer
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpulevel_t = int
+rbx.platform.typedef.cpumask_t = uint
+rbx.platform.typedef.cpusetid_t = int
+rbx.platform.typedef.cpuwhich_t = int
+rbx.platform.typedef.critical_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = ulong
+rbx.platform.typedef.fflags_t = uint
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = long_long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.lwpid_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ulong_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = long_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_register_t = uint
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vm_offset_t = uint
+rbx.platform.typedef.vm_ooffset_t = long_long
+rbx.platform.typedef.vm_paddr_t = uint
+rbx.platform.typedef.vm_pindex_t = ulong_long
+rbx.platform.typedef.vm_size_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-gnu/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-gnu/types.conf
new file mode 100644
index 0000000..fa2fa8c
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-gnu/types.conf
@@ -0,0 +1,107 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = uint
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsid_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__pthread_key = int
+rbx.platform.typedef.__pthread_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__sigset_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.fsid_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.pthread_t = int
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.sigset_t = ulong
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-linux/types.conf
new file mode 100644
index 0000000..feb6bc4
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-linux/types.conf
@@ -0,0 +1,103 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-netbsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-netbsd/types.conf
new file mode 100644
index 0000000..a5aba89
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-netbsd/types.conf
@@ -0,0 +1,126 @@
+rbx.platform.typedef.__clock_t = int
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = int
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = uint
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = int
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = int
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = int
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr64_t = long_long
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-openbsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-openbsd/types.conf
new file mode 100644
index 0000000..15a0d61
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-openbsd/types.conf
@@ -0,0 +1,128 @@
+rbx.platform.typedef.__clock_t = int
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = int
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = uint
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = int
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = int
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = int
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr64_t = long_long
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-solaris/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-solaris/types.conf
new file mode 100644
index 0000000..22a2414
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-solaris/types.conf
@@ -0,0 +1,122 @@
+rbx.platform.typedef.*caddr_t = char
+rbx.platform.typedef.blkcnt64_t = long_long
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cnt_t = short
+rbx.platform.typedef.cpu_flag_t = ushort
+rbx.platform.typedef.ctid_t = long
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.datalink_id_t = uint
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.diskaddr_t = ulong_long
+rbx.platform.typedef.disp_lock_t = uchar
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fds_mask = long
+rbx.platform.typedef.fsblkcnt64_t = ulong_long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt64_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.hrtime_t = long_long
+rbx.platform.typedef.id_t = long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.index_t = short
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.ipaddr_t = uint
+rbx.platform.typedef.k_fltset_t = uint
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.len_t = ulong_long
+rbx.platform.typedef.lgrp_id_t = long
+rbx.platform.typedef.lock_t = uchar
+rbx.platform.typedef.longlong_t = long_long
+rbx.platform.typedef.major_t = ulong
+rbx.platform.typedef.minor_t = ulong
+rbx.platform.typedef.mode_t = ulong
+rbx.platform.typedef.model_t = uint
+rbx.platform.typedef.nfds_t = ulong
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.o_dev_t = short
+rbx.platform.typedef.o_gid_t = ushort
+rbx.platform.typedef.o_ino_t = ushort
+rbx.platform.typedef.o_mode_t = ushort
+rbx.platform.typedef.o_nlink_t = short
+rbx.platform.typedef.o_pid_t = short
+rbx.platform.typedef.o_uid_t = ushort
+rbx.platform.typedef.off64_t = long_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.offset_t = long_long
+rbx.platform.typedef.pad64_t = long_long
+rbx.platform.typedef.pfn_t = ulong
+rbx.platform.typedef.pgcnt_t = ulong
+rbx.platform.typedef.pid_t = long
+rbx.platform.typedef.poolid_t = long
+rbx.platform.typedef.pri_t = short
+rbx.platform.typedef.projid_t = long
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_t = uint
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.rlim64_t = ulong_long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.spgcnt_t = long
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.sysid_t = short
+rbx.platform.typedef.t_scalar_t = long
+rbx.platform.typedef.t_uscalar_t = ulong
+rbx.platform.typedef.taskid_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_longlong_t = ulong_long
+rbx.platform.typedef.u_offset_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uchar_t = uchar
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uint_t = uint
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ulong_t = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.upad64_t = ulong_long
+rbx.platform.typedef.use_t = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.ushort_t = ushort
+rbx.platform.typedef.zoneid_t = long
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-windows/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-windows/types.conf
new file mode 100644
index 0000000..a5d0b05
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/i386-windows/types.conf
@@ -0,0 +1,52 @@
+rbx.platform.typedef.__time32_t = long
+rbx.platform.typedef.__time64_t = long_long
+rbx.platform.typedef._dev_t = uint
+rbx.platform.typedef._ino_t = ushort
+rbx.platform.typedef._mode_t = ushort
+rbx.platform.typedef._off64_t = long_long
+rbx.platform.typedef._off_t = long
+rbx.platform.typedef._pid_t = int
+rbx.platform.typedef._sigset_t = ulong
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.errno_t = int
+rbx.platform.typedef.ino_t = ushort
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = short
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.off32_t = long
+rbx.platform.typedef.off64_t = long_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.rsize_t = uint
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ushort
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.wchar_t = ushort
+rbx.platform.typedef.wctype_t = ushort
+rbx.platform.typedef.wint_t = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/ia64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/ia64-linux/types.conf
new file mode 100644
index 0000000..e0eeecc
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/ia64-linux/types.conf
@@ -0,0 +1,104 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/loongarch64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/loongarch64-linux/types.conf
new file mode 100644
index 0000000..aa8716d
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/loongarch64-linux/types.conf
@@ -0,0 +1,141 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = long
+rbx.platform.typedef.int_fast32_t = long
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ulong
+rbx.platform.typedef.uint_fast32_t = ulong
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips-linux/types.conf
new file mode 100644
index 0000000..24e8202
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64-linux/types.conf
new file mode 100644
index 0000000..b61f4f7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64-linux/types.conf
@@ -0,0 +1,104 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64el-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64el-linux/types.conf
new file mode 100644
index 0000000..b61f4f7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mips64el-linux/types.conf
@@ -0,0 +1,104 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsel-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsel-linux/types.conf
new file mode 100644
index 0000000..24e8202
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsel-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6-linux/types.conf
new file mode 100644
index 0000000..24e8202
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6el-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6el-linux/types.conf
new file mode 100644
index 0000000..24e8202
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa32r6el-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6-linux/types.conf
new file mode 100644
index 0000000..b61f4f7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6-linux/types.conf
@@ -0,0 +1,104 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6el-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6el-linux/types.conf
new file mode 100644
index 0000000..b61f4f7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/mipsisa64r6el-linux/types.conf
@@ -0,0 +1,104 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-aix/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-aix/types.conf
new file mode 100644
index 0000000..cbd20e7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-aix/types.conf
@@ -0,0 +1,180 @@
+rbx.platform.typedef.UTF32Char = uint
+rbx.platform.typedef.UniChar = ushort
+rbx.platform.typedef.__cptr32 = string
+rbx.platform.typedef.__cptr64 = ulong_long
+rbx.platform.typedef.__long32_t = long
+rbx.platform.typedef.__long64_t = int
+rbx.platform.typedef.__ptr32 = pointer
+rbx.platform.typedef.__ptr64 = ulong_long
+rbx.platform.typedef.__ulong32_t = ulong
+rbx.platform.typedef.__ulong64_t = uint
+rbx.platform.typedef.aptx_t = ushort
+rbx.platform.typedef.blkcnt32_t = int
+rbx.platform.typedef.blkcnt64_t = ulong_long
+rbx.platform.typedef.blkcnt_t = int
+rbx.platform.typedef.blksize32_t = int
+rbx.platform.typedef.blksize64_t = ulong_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.boolean_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.chan_t = int
+rbx.platform.typedef.class_id_t = uint
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = long_long
+rbx.platform.typedef.cnt64_t = long_long
+rbx.platform.typedef.cnt_t = short
+rbx.platform.typedef.crid_t = int
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr64_t = long_long
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev32_t = uint
+rbx.platform.typedef.dev64_t = ulong_long
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.esid_t = uint
+rbx.platform.typedef.ext_t = int
+rbx.platform.typedef.fpos64_t = long_long
+rbx.platform.typedef.fpos_t = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino32_t = uint
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16 = short
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32 = int
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int32long64_t = int
+rbx.platform.typedef.int64 = long_long
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8 = char
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = short
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intfast_t = int
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.krpn_t = int
+rbx.platform.typedef.kvmhandle_t = ulong
+rbx.platform.typedef.kvmid_t = long
+rbx.platform.typedef.kvpn_t = int
+rbx.platform.typedef.level_t = int
+rbx.platform.typedef.liobn_t = uint
+rbx.platform.typedef.long32int64_t = long
+rbx.platform.typedef.longlong_t = long_long
+rbx.platform.typedef.mid_t = pointer
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.mtyp_t = long
+rbx.platform.typedef.nlink_t = short
+rbx.platform.typedef.off64_t = long_long
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.offset_t = long_long
+rbx.platform.typedef.paddr_t = long
+rbx.platform.typedef.pdtx_t = int
+rbx.platform.typedef.pid32_t = int
+rbx.platform.typedef.pid64_t = ulong_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pshift_t = ushort
+rbx.platform.typedef.psize_t = long_long
+rbx.platform.typedef.psx_t = short
+rbx.platform.typedef.ptex_t = ulong
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_t = uint
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.rlim64_t = ulong_long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.rpn64_t = long_long
+rbx.platform.typedef.rpn_t = int
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.signal_t = int
+rbx.platform.typedef.size64_t = ulong_long
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.slab_t[12] = char
+rbx.platform.typedef.snidx_t = int
+rbx.platform.typedef.socklen_t = ulong
+rbx.platform.typedef.soff_t = int
+rbx.platform.typedef.sshift_t = ushort
+rbx.platform.typedef.ssize64_t = long_long
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.swhatx_t = ulong
+rbx.platform.typedef.tid32_t = int
+rbx.platform.typedef.tid64_t = ulong_long
+rbx.platform.typedef.tid_t = int
+rbx.platform.typedef.time32_t = int
+rbx.platform.typedef.time64_t = long_long
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.timer32_t = int
+rbx.platform.typedef.timer64_t = long_long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16 = ushort
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32 = uint
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64 = ulong_long
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8 = uchar
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_longlong_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uchar = uchar
+rbx.platform.typedef.uchar_t = uchar
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint32long64_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ushort
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uint_t = uint
+rbx.platform.typedef.uintfast_t = uint
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ulong32int64_t = ulong
+rbx.platform.typedef.ulong_t = ulong
+rbx.platform.typedef.unidx_t = int
+rbx.platform.typedef.unit_addr_t = ulong_long
+rbx.platform.typedef.ureg_t = ulong
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.ushort_t = ushort
+rbx.platform.typedef.va_list = string
+rbx.platform.typedef.vmfkey_t = uint
+rbx.platform.typedef.vmhandle32_t = uint
+rbx.platform.typedef.vmhandle_t = ulong
+rbx.platform.typedef.vmhwkey_t = int
+rbx.platform.typedef.vmid32_t = int
+rbx.platform.typedef.vmid64_t = long_long
+rbx.platform.typedef.vmid_t = long
+rbx.platform.typedef.vmidx_t = int
+rbx.platform.typedef.vmkey_t = int
+rbx.platform.typedef.vmlpghandle_t = ulong
+rbx.platform.typedef.vmm_lock_t = int
+rbx.platform.typedef.vmnodeidx_t = int
+rbx.platform.typedef.vmprkey_t = uint
+rbx.platform.typedef.vmsize_t = int
+rbx.platform.typedef.vpn_t = int
+rbx.platform.typedef.wchar_t = ushort
+rbx.platform.typedef.wctype_t = uint
+rbx.platform.typedef.wint_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-darwin/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-darwin/types.conf
new file mode 100644
index 0000000..ae100f4
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-darwin/types.conf
@@ -0,0 +1,100 @@
+rbx.platform.typedef.__darwin_blkcnt_t = long_long
+rbx.platform.typedef.__darwin_blksize_t = int
+rbx.platform.typedef.__darwin_clock_t = ulong
+rbx.platform.typedef.__darwin_ct_rune_t = int
+rbx.platform.typedef.__darwin_dev_t = int
+rbx.platform.typedef.__darwin_fsblkcnt_t = uint
+rbx.platform.typedef.__darwin_fsfilcnt_t = uint
+rbx.platform.typedef.__darwin_gid_t = uint
+rbx.platform.typedef.__darwin_id_t = uint
+rbx.platform.typedef.__darwin_ino64_t = ulong_long
+rbx.platform.typedef.__darwin_ino_t = ulong_long
+rbx.platform.typedef.__darwin_intptr_t = long
+rbx.platform.typedef.__darwin_mach_port_name_t = uint
+rbx.platform.typedef.__darwin_mach_port_t = uint
+rbx.platform.typedef.__darwin_mode_t = ushort
+rbx.platform.typedef.__darwin_natural_t = uint
+rbx.platform.typedef.__darwin_off_t = long_long
+rbx.platform.typedef.__darwin_pid_t = int
+rbx.platform.typedef.__darwin_pthread_key_t = ulong
+rbx.platform.typedef.__darwin_ptrdiff_t = int
+rbx.platform.typedef.__darwin_rune_t = int
+rbx.platform.typedef.__darwin_sigset_t = uint
+rbx.platform.typedef.__darwin_size_t = ulong
+rbx.platform.typedef.__darwin_socklen_t = uint
+rbx.platform.typedef.__darwin_ssize_t = long
+rbx.platform.typedef.__darwin_suseconds_t = int
+rbx.platform.typedef.__darwin_time_t = long
+rbx.platform.typedef.__darwin_uid_t = uint
+rbx.platform.typedef.__darwin_useconds_t = uint
+rbx.platform.typedef.__darwin_uuid_t[16] = uchar
+rbx.platform.typedef.__darwin_wchar_t = int
+rbx.platform.typedef.__darwin_wint_t = int
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fd_mask = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = uint
+rbx.platform.typedef.fsfilcnt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ushort
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.syscall_arg_t = ulong_long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.user_addr_t = ulong_long
+rbx.platform.typedef.user_long_t = long_long
+rbx.platform.typedef.user_size_t = ulong_long
+rbx.platform.typedef.user_ssize_t = long_long
+rbx.platform.typedef.user_time_t = long_long
+rbx.platform.typedef.user_ulong_t = ulong_long
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-linux/types.conf
new file mode 100644
index 0000000..42eec13
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-linux/types.conf
@@ -0,0 +1,130 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = int
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = long
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-openbsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-openbsd/types.conf
new file mode 100644
index 0000000..aea7955
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc-openbsd/types.conf
@@ -0,0 +1,156 @@
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long_long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = ulong_long
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = long_long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = long_long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = int
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.sigset_t = uint
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = long_long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uint
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
+rbx.platform.typedef.wchar_t = int
+rbx.platform.typedef.wint_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64-linux/types.conf
new file mode 100644
index 0000000..b61f4f7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64-linux/types.conf
@@ -0,0 +1,104 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64le-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64le-linux/types.conf
new file mode 100644
index 0000000..9ac9c2e
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/powerpc64le-linux/types.conf
@@ -0,0 +1,100 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/riscv64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/riscv64-linux/types.conf
new file mode 100644
index 0000000..ede0f98
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/riscv64-linux/types.conf
@@ -0,0 +1,104 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390-linux/types.conf
new file mode 100644
index 0000000..291b032
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390x-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390x-linux/types.conf
new file mode 100644
index 0000000..32a7feb
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/s390x-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-linux/types.conf
new file mode 100644
index 0000000..aea09d3
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long_long
+rbx.platform.typedef.__blkcnt64_t = long_long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong_long
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong_long
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong_long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = int
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long_long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long_long
+rbx.platform.typedef.__rlim64_t = ulong_long
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = int
+rbx.platform.typedef.__suseconds_t = int
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong_long
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong_long
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-solaris/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-solaris/types.conf
new file mode 100644
index 0000000..a1548e5
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparc-solaris/types.conf
@@ -0,0 +1,128 @@
+rbx.platform.typedef.() = pointer
+rbx.platform.typedef.*caddr_t = char
+rbx.platform.typedef.Psocklen_t = pointer
+rbx.platform.typedef.avl_index_t = uint
+rbx.platform.typedef.blkcnt64_t = long_long
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cnt_t = short
+rbx.platform.typedef.cpu_flag_t = ushort
+rbx.platform.typedef.ctid_t = long
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.diskaddr_t = ulong_long
+rbx.platform.typedef.disp_lock_t = uchar
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fds_mask = long
+rbx.platform.typedef.fsblkcnt64_t = ulong_long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt64_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = long
+rbx.platform.typedef.hrtime_t = long_long
+rbx.platform.typedef.id_t = long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.index_t = short
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int) = pointer
+rbx.platform.typedef.int) = pointer
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.ipaddr_t = uint
+rbx.platform.typedef.k_fltset_t = uint
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.kid_t = int
+rbx.platform.typedef.len_t = ulong_long
+rbx.platform.typedef.lock_t = uchar
+rbx.platform.typedef.longlong_t = long_long
+rbx.platform.typedef.major_t = ulong
+rbx.platform.typedef.minor_t = ulong
+rbx.platform.typedef.mode_t = ulong
+rbx.platform.typedef.model_t = uint
+rbx.platform.typedef.nfds_t = ulong
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.o_dev_t = short
+rbx.platform.typedef.o_gid_t = ushort
+rbx.platform.typedef.o_ino_t = ushort
+rbx.platform.typedef.o_mode_t = ushort
+rbx.platform.typedef.o_nlink_t = short
+rbx.platform.typedef.o_pid_t = short
+rbx.platform.typedef.o_uid_t = ushort
+rbx.platform.typedef.off64_t = long_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.offset_t = long_long
+rbx.platform.typedef.pad64_t = long_long
+rbx.platform.typedef.pfn_t = ulong
+rbx.platform.typedef.pgcnt_t = ulong
+rbx.platform.typedef.pid_t = long
+rbx.platform.typedef.poolid_t = long
+rbx.platform.typedef.pri_t = short
+rbx.platform.typedef.projid_t = long
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_t = uint
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.rlim64_t = ulong_long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.size_t) = pointer
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.spgcnt_t = long
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.sysid_t = short
+rbx.platform.typedef.t_scalar_t = long
+rbx.platform.typedef.t_uscalar_t = ulong
+rbx.platform.typedef.taskid_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.ts_t = long_long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_longlong_t = ulong_long
+rbx.platform.typedef.u_offset_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uchar_t = uchar
+rbx.platform.typedef.uid_t = long
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uint_t = uint
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ulong_t = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.upad64_t = ulong_long
+rbx.platform.typedef.use_t = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.ushort_t = ushort
+rbx.platform.typedef.zoneid_t = long
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-linux/types.conf
new file mode 100644
index 0000000..7626bfc
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-linux/types.conf
@@ -0,0 +1,102 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.*__qaddr_t = long
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = int
+rbx.platform.typedef.__swblk_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-openbsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-openbsd/types.conf
new file mode 100644
index 0000000..aea7955
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-openbsd/types.conf
@@ -0,0 +1,156 @@
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long_long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = ulong_long
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = long_long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = long_long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = int
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.sigset_t = uint
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = long_long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uint
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
+rbx.platform.typedef.wchar_t = int
+rbx.platform.typedef.wint_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-solaris/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-solaris/types.conf
new file mode 100644
index 0000000..a1548e5
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sparcv9-solaris/types.conf
@@ -0,0 +1,128 @@
+rbx.platform.typedef.() = pointer
+rbx.platform.typedef.*caddr_t = char
+rbx.platform.typedef.Psocklen_t = pointer
+rbx.platform.typedef.avl_index_t = uint
+rbx.platform.typedef.blkcnt64_t = long_long
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cnt_t = short
+rbx.platform.typedef.cpu_flag_t = ushort
+rbx.platform.typedef.ctid_t = long
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.diskaddr_t = ulong_long
+rbx.platform.typedef.disp_lock_t = uchar
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fds_mask = long
+rbx.platform.typedef.fsblkcnt64_t = ulong_long
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt64_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = long
+rbx.platform.typedef.hrtime_t = long_long
+rbx.platform.typedef.id_t = long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.index_t = short
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int) = pointer
+rbx.platform.typedef.int) = pointer
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = int
+rbx.platform.typedef.ipaddr_t = uint
+rbx.platform.typedef.k_fltset_t = uint
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.kid_t = int
+rbx.platform.typedef.len_t = ulong_long
+rbx.platform.typedef.lock_t = uchar
+rbx.platform.typedef.longlong_t = long_long
+rbx.platform.typedef.major_t = ulong
+rbx.platform.typedef.minor_t = ulong
+rbx.platform.typedef.mode_t = ulong
+rbx.platform.typedef.model_t = uint
+rbx.platform.typedef.nfds_t = ulong
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.o_dev_t = short
+rbx.platform.typedef.o_gid_t = ushort
+rbx.platform.typedef.o_ino_t = ushort
+rbx.platform.typedef.o_mode_t = ushort
+rbx.platform.typedef.o_nlink_t = short
+rbx.platform.typedef.o_pid_t = short
+rbx.platform.typedef.o_uid_t = ushort
+rbx.platform.typedef.off64_t = long_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.offset_t = long_long
+rbx.platform.typedef.pad64_t = long_long
+rbx.platform.typedef.pfn_t = ulong
+rbx.platform.typedef.pgcnt_t = ulong
+rbx.platform.typedef.pid_t = long
+rbx.platform.typedef.poolid_t = long
+rbx.platform.typedef.pri_t = short
+rbx.platform.typedef.projid_t = long
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_t = uint
+rbx.platform.typedef.ptrdiff_t = int
+rbx.platform.typedef.rlim64_t = ulong_long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = uint
+rbx.platform.typedef.size_t) = pointer
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.spgcnt_t = long
+rbx.platform.typedef.ssize_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.sysid_t = short
+rbx.platform.typedef.t_scalar_t = long
+rbx.platform.typedef.t_uscalar_t = ulong
+rbx.platform.typedef.taskid_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.ts_t = long_long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_longlong_t = ulong_long
+rbx.platform.typedef.u_offset_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uchar_t = uchar
+rbx.platform.typedef.uid_t = long
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uint_t = uint
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = uint
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ulong_t = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.upad64_t = ulong_long
+rbx.platform.typedef.use_t = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.ushort_t = ushort
+rbx.platform.typedef.zoneid_t = long
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sw_64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sw_64-linux/types.conf
new file mode 100644
index 0000000..aa8716d
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/sw_64-linux/types.conf
@@ -0,0 +1,141 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = long
+rbx.platform.typedef.int_fast32_t = long
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ulong
+rbx.platform.typedef.uint_fast32_t = ulong
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-cygwin/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-cygwin/types.conf
new file mode 100644
index 0000000..5bef6d7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-cygwin/types.conf
@@ -0,0 +1,3 @@
+rbx.platform.typedef.ptrdiff_t = int64
+rbx.platform.typedef.size_t = uint64
+rbx.platform.typedef.ssize_t = int64
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-darwin/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-darwin/types.conf
new file mode 100644
index 0000000..68841bb
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-darwin/types.conf
@@ -0,0 +1,130 @@
+rbx.platform.typedef.__darwin_blkcnt_t = long_long
+rbx.platform.typedef.__darwin_blksize_t = int
+rbx.platform.typedef.__darwin_clock_t = ulong
+rbx.platform.typedef.__darwin_ct_rune_t = int
+rbx.platform.typedef.__darwin_dev_t = int
+rbx.platform.typedef.__darwin_fsblkcnt_t = uint
+rbx.platform.typedef.__darwin_fsfilcnt_t = uint
+rbx.platform.typedef.__darwin_gid_t = uint
+rbx.platform.typedef.__darwin_id_t = uint
+rbx.platform.typedef.__darwin_ino64_t = ulong_long
+rbx.platform.typedef.__darwin_ino_t = ulong_long
+rbx.platform.typedef.__darwin_intptr_t = long
+rbx.platform.typedef.__darwin_mach_port_name_t = uint
+rbx.platform.typedef.__darwin_mach_port_t = uint
+rbx.platform.typedef.__darwin_mode_t = ushort
+rbx.platform.typedef.__darwin_natural_t = uint
+rbx.platform.typedef.__darwin_off_t = long_long
+rbx.platform.typedef.__darwin_pid_t = int
+rbx.platform.typedef.__darwin_pthread_key_t = ulong
+rbx.platform.typedef.__darwin_ptrdiff_t = long
+rbx.platform.typedef.__darwin_rune_t = int
+rbx.platform.typedef.__darwin_sigset_t = uint
+rbx.platform.typedef.__darwin_size_t = ulong
+rbx.platform.typedef.__darwin_socklen_t = uint
+rbx.platform.typedef.__darwin_ssize_t = long
+rbx.platform.typedef.__darwin_suseconds_t = int
+rbx.platform.typedef.__darwin_time_t = long
+rbx.platform.typedef.__darwin_uid_t = uint
+rbx.platform.typedef.__darwin_useconds_t = uint
+rbx.platform.typedef.__darwin_uuid_string_t[37] = char
+rbx.platform.typedef.__darwin_uuid_t[16] = uchar
+rbx.platform.typedef.__darwin_wchar_t = int
+rbx.platform.typedef.__darwin_wint_t = int
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.errno_t = int
+rbx.platform.typedef.fd_mask = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = uint
+rbx.platform.typedef.fsfilcnt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino64_t = ulong_long
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = short
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ushort
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long_long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.rsize_t = ulong
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.sae_associd_t = uint
+rbx.platform.typedef.sae_connid_t = uint
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.syscall_arg_t = ulong_long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ushort
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.user_addr_t = ulong_long
+rbx.platform.typedef.user_long_t = long_long
+rbx.platform.typedef.user_off_t = long_long
+rbx.platform.typedef.user_size_t = ulong_long
+rbx.platform.typedef.user_ssize_t = long_long
+rbx.platform.typedef.user_time_t = long_long
+rbx.platform.typedef.user_ulong_t = ulong_long
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-dragonflybsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-dragonflybsd/types.conf
new file mode 100644
index 0000000..889f6a3
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-dragonflybsd/types.conf
@@ -0,0 +1,130 @@
+rbx.platform.typedef.*) = pointer
+rbx.platform.typedef.___wchar_t = int
+rbx.platform.typedef.__clock_t = ulong
+rbx.platform.typedef.__clockid_t = ulong
+rbx.platform.typedef.__fd_mask = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intlp_t = long
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long
+rbx.platform.typedef.__rlim_t = long
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintlp_t = ulong
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.c_caddr_t = pointer
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.clockid_t = ulong
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = int
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.lwpid_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = long
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_daddr_t = uint
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uint
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.v_caddr_t = pointer
+rbx.platform.typedef.wchar_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd/types.conf
new file mode 100644
index 0000000..8dbe370
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd/types.conf
@@ -0,0 +1,128 @@
+rbx.platform.typedef.__clock_t = int
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = int
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = uint
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long_long
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr64_t = long_long
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long_long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd12/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd12/types.conf
new file mode 100644
index 0000000..31b1073
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-freebsd12/types.conf
@@ -0,0 +1,158 @@
+rbx.platform.typedef.*) = pointer
+rbx.platform.typedef.___wchar_t = int
+rbx.platform.typedef.__accmode_t = int
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__char16_t = ushort
+rbx.platform.typedef.__char32_t = uint
+rbx.platform.typedef.__clock_t = int
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpulevel_t = int
+rbx.platform.typedef.__cpusetid_t = int
+rbx.platform.typedef.__cpuwhich_t = int
+rbx.platform.typedef.__critical_t = long
+rbx.platform.typedef.__ct_rune_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = ulong
+rbx.platform.typedef.__fflags_t = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = long
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intfptr_t = long
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__lwpid_t = int
+rbx.platform.typedef.__mode_t = ushort
+rbx.platform.typedef.__nl_item = int
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long
+rbx.platform.typedef.__rlim_t = long
+rbx.platform.typedef.__rman_res_t = ulong
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = long
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__u_register_t = ulong
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintfptr_t = ulong
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vm_offset_t = ulong
+rbx.platform.typedef.__vm_paddr_t = ulong
+rbx.platform.typedef.__vm_size_t = ulong
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.accmode_t = int
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.c_caddr_t = pointer
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.cap_ioctl_t = ulong
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpulevel_t = int
+rbx.platform.typedef.cpusetid_t = int
+rbx.platform.typedef.cpuwhich_t = int
+rbx.platform.typedef.critical_t = long
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = ulong
+rbx.platform.typedef.fflags_t = uint
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = long
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.ksize_t = ulong
+rbx.platform.typedef.kvaddr_t = ulong
+rbx.platform.typedef.lwpid_t = int
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off64_t = long
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = long
+rbx.platform.typedef.rman_res_t = ulong
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.sbintime_t = long
+rbx.platform.typedef.segsz_t = long
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_register_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vm_offset_t = ulong
+rbx.platform.typedef.vm_ooffset_t = long
+rbx.platform.typedef.vm_paddr_t = ulong
+rbx.platform.typedef.vm_pindex_t = ulong
+rbx.platform.typedef.vm_size_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-haiku/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-haiku/types.conf
new file mode 100644
index 0000000..d5ddfa7
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-haiku/types.conf
@@ -0,0 +1,117 @@
+rbx.platform.typedef.__haiku_addr_t = ulong
+rbx.platform.typedef.__haiku_generic_addr_t = ulong
+rbx.platform.typedef.__haiku_int16 = short
+rbx.platform.typedef.__haiku_int32 = int
+rbx.platform.typedef.__haiku_int64 = long
+rbx.platform.typedef.__haiku_int8 = char
+rbx.platform.typedef.__haiku_phys_addr_t = ulong
+rbx.platform.typedef.__haiku_phys_saddr_t = long
+rbx.platform.typedef.__haiku_saddr_t = long
+rbx.platform.typedef.__haiku_std_int16 = short
+rbx.platform.typedef.__haiku_std_int32 = int
+rbx.platform.typedef.__haiku_std_int64 = long
+rbx.platform.typedef.__haiku_std_int8 = char
+rbx.platform.typedef.__haiku_std_uint16 = ushort
+rbx.platform.typedef.__haiku_std_uint32 = uint
+rbx.platform.typedef.__haiku_std_uint64 = ulong
+rbx.platform.typedef.__haiku_std_uint8 = uchar
+rbx.platform.typedef.__haiku_uint16 = ushort
+rbx.platform.typedef.__haiku_uint32 = uint
+rbx.platform.typedef.__haiku_uint64 = ulong
+rbx.platform.typedef.__haiku_uint8 = uchar
+rbx.platform.typedef.addr_t = ulong
+rbx.platform.typedef.bigtime_t = long
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = pointer
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cnt_t = int
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fd_mask = uint
+rbx.platform.typedef.fsblkcnt_t = long
+rbx.platform.typedef.fsfilcnt_t = long
+rbx.platform.typedef.generic_addr_t = ulong
+rbx.platform.typedef.generic_size_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = int
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = long
+rbx.platform.typedef.int16 = short
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32 = int
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64 = long
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8 = char
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = int
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nanotime_t = long
+rbx.platform.typedef.nlink_t = int
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.perform_code = uint
+rbx.platform.typedef.phys_addr_t = ulong
+rbx.platform.typedef.phys_size_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = int
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.sig_atomic_t = int
+rbx.platform.typedef.sigset_t = ulong
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.status_t = int
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.type_code = uint
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uchar = uchar
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16 = ushort
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32 = uint
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64 = ulong
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8 = uchar
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uint
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.umode_t = uint
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.unichar = ushort
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.void*) = pointer
+rbx.platform.typedef.wchar_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-linux/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-linux/types.conf
new file mode 100644
index 0000000..060f161
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-linux/types.conf
@@ -0,0 +1,132 @@
+rbx.platform.typedef.*__caddr_t = char
+rbx.platform.typedef.__blkcnt64_t = long
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = long
+rbx.platform.typedef.__clock_t = long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__daddr_t = int
+rbx.platform.typedef.__dev_t = ulong
+rbx.platform.typedef.__fd_mask = long
+rbx.platform.typedef.__fsblkcnt64_t = ulong
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt64_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__fsword_t = long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino64_t = ulong
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = int
+rbx.platform.typedef.__loff_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = ulong
+rbx.platform.typedef.__off64_t = long
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__priority_which_t = int
+rbx.platform.typedef.__quad_t = long
+rbx.platform.typedef.__rlim64_t = ulong
+rbx.platform.typedef.__rlim_t = ulong
+rbx.platform.typedef.__rlimit_resource_t = int
+rbx.platform.typedef.__rusage_who_t = int
+rbx.platform.typedef.__sig_atomic_t = int
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__syscall_slong_t = long
+rbx.platform.typedef.__syscall_ulong_t = ulong
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = pointer
+rbx.platform.typedef.__u_char = uchar
+rbx.platform.typedef.__u_int = uint
+rbx.platform.typedef.__u_long = ulong
+rbx.platform.typedef.__u_quad_t = ulong
+rbx.platform.typedef.__u_short = ushort
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = long
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = long
+rbx.platform.typedef.int_fast32_t = long
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.loff_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ulong
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_once_t = int
+rbx.platform.typedef.pthread_t = ulong
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.quad_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = pointer
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ulong
+rbx.platform.typedef.uint_fast32_t = ulong
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.wchar_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-msys/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-msys/types.conf
new file mode 100644
index 0000000..aa827c0
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-msys/types.conf
@@ -0,0 +1,119 @@
+rbx.platform.typedef.*addr_t = char
+rbx.platform.typedef.__ULong = uint
+rbx.platform.typedef.__blkcnt_t = long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = ulong
+rbx.platform.typedef.__clockid_t = ulong
+rbx.platform.typedef.__cpu_mask = ulong
+rbx.platform.typedef.__dev_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong
+rbx.platform.typedef.__fsfilcnt_t = ulong
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__ino_t = ulong
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long_long
+rbx.platform.typedef.__loff_t = long_long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nl_item = int
+rbx.platform.typedef.__nlink_t = ushort
+rbx.platform.typedef.__off_t = long
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__sigset_t = ulong
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = int
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__time_t = long
+rbx.platform.typedef.__timer_t = ulong
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = ulong
+rbx.platform.typedef._fpos64_t = long_long
+rbx.platform.typedef._fpos_t = long
+rbx.platform.typedef._off64_t = long_long
+rbx.platform.typedef._off_t = long
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = ulong
+rbx.platform.typedef.clockid_t = ulong
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.fd_mask = ulong
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = long
+rbx.platform.typedef.int_fast32_t = long
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long_long
+rbx.platform.typedef.loff_t = long_long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = ushort
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sbintime_t = long
+rbx.platform.typedef.sig_atomic_t = int
+rbx.platform.typedef.sigset_t = ulong
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = int
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = ulong
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_register_t = ulong
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ulong
+rbx.platform.typedef.uint_fast32_t = ulong
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.useconds_t = ulong
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vm_offset_t = ulong
+rbx.platform.typedef.vm_size_t = ulong
+rbx.platform.typedef.wint_t = uint
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-netbsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-netbsd/types.conf
new file mode 100644
index 0000000..15a0d61
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-netbsd/types.conf
@@ -0,0 +1,128 @@
+rbx.platform.typedef.__clock_t = int
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = int
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = uint
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = int
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = int
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = int
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = int
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr64_t = long_long
+rbx.platform.typedef.daddr_t = int
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = uint
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = int
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = int
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = int
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-openbsd/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-openbsd/types.conf
new file mode 100644
index 0000000..6abc9c0
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-openbsd/types.conf
@@ -0,0 +1,134 @@
+rbx.platform.typedef.__blkcnt_t = long_long
+rbx.platform.typedef.__blksize_t = int
+rbx.platform.typedef.__clock_t = long_long
+rbx.platform.typedef.__clockid_t = int
+rbx.platform.typedef.__cpuid_t = ulong
+rbx.platform.typedef.__dev_t = int
+rbx.platform.typedef.__fd_mask = uint
+rbx.platform.typedef.__fixpt_t = uint
+rbx.platform.typedef.__fsblkcnt_t = ulong_long
+rbx.platform.typedef.__fsfilcnt_t = ulong_long
+rbx.platform.typedef.__gid_t = uint
+rbx.platform.typedef.__id_t = uint
+rbx.platform.typedef.__in_addr_t = uint
+rbx.platform.typedef.__in_port_t = ushort
+rbx.platform.typedef.__ino_t = ulong_long
+rbx.platform.typedef.__int16_t = short
+rbx.platform.typedef.__int32_t = int
+rbx.platform.typedef.__int64_t = long_long
+rbx.platform.typedef.__int8_t = char
+rbx.platform.typedef.__int_fast16_t = int
+rbx.platform.typedef.__int_fast32_t = int
+rbx.platform.typedef.__int_fast64_t = long_long
+rbx.platform.typedef.__int_fast8_t = int
+rbx.platform.typedef.__int_least16_t = short
+rbx.platform.typedef.__int_least32_t = int
+rbx.platform.typedef.__int_least64_t = long_long
+rbx.platform.typedef.__int_least8_t = char
+rbx.platform.typedef.__intmax_t = long_long
+rbx.platform.typedef.__intptr_t = long
+rbx.platform.typedef.__key_t = long
+rbx.platform.typedef.__mode_t = uint
+rbx.platform.typedef.__nlink_t = uint
+rbx.platform.typedef.__off_t = long_long
+rbx.platform.typedef.__paddr_t = ulong
+rbx.platform.typedef.__pid_t = int
+rbx.platform.typedef.__psize_t = ulong
+rbx.platform.typedef.__ptrdiff_t = long
+rbx.platform.typedef.__register_t = long
+rbx.platform.typedef.__rlim_t = ulong_long
+rbx.platform.typedef.__rune_t = int
+rbx.platform.typedef.__sa_family_t = uchar
+rbx.platform.typedef.__segsz_t = int
+rbx.platform.typedef.__size_t = ulong
+rbx.platform.typedef.__socklen_t = uint
+rbx.platform.typedef.__ssize_t = long
+rbx.platform.typedef.__suseconds_t = long
+rbx.platform.typedef.__swblk_t = int
+rbx.platform.typedef.__time_t = long_long
+rbx.platform.typedef.__timer_t = int
+rbx.platform.typedef.__uid_t = uint
+rbx.platform.typedef.__uint16_t = ushort
+rbx.platform.typedef.__uint32_t = uint
+rbx.platform.typedef.__uint64_t = ulong_long
+rbx.platform.typedef.__uint8_t = uchar
+rbx.platform.typedef.__uint_fast16_t = uint
+rbx.platform.typedef.__uint_fast32_t = uint
+rbx.platform.typedef.__uint_fast64_t = ulong_long
+rbx.platform.typedef.__uint_fast8_t = uint
+rbx.platform.typedef.__uint_least16_t = ushort
+rbx.platform.typedef.__uint_least32_t = uint
+rbx.platform.typedef.__uint_least64_t = ulong_long
+rbx.platform.typedef.__uint_least8_t = uchar
+rbx.platform.typedef.__uintmax_t = ulong_long
+rbx.platform.typedef.__uintptr_t = ulong
+rbx.platform.typedef.__useconds_t = uint
+rbx.platform.typedef.__vaddr_t = ulong
+rbx.platform.typedef.__vsize_t = ulong
+rbx.platform.typedef.__wchar_t = int
+rbx.platform.typedef.__wctrans_t = pointer
+rbx.platform.typedef.__wctype_t = pointer
+rbx.platform.typedef.__wint_t = int
+rbx.platform.typedef.blkcnt_t = long_long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.caddr_t = string
+rbx.platform.typedef.clock_t = long_long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cpuid_t = ulong
+rbx.platform.typedef.daddr32_t = int
+rbx.platform.typedef.daddr_t = long_long
+rbx.platform.typedef.dev_t = int
+rbx.platform.typedef.fixpt_t = uint
+rbx.platform.typedef.fsblkcnt_t = ulong_long
+rbx.platform.typedef.fsfilcnt_t = ulong_long
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.id_t = uint
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.ino_t = ulong_long
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.key_t = long
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.paddr_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.psize_t = ulong
+rbx.platform.typedef.qaddr_t = pointer
+rbx.platform.typedef.quad_t = long_long
+rbx.platform.typedef.register_t = long
+rbx.platform.typedef.rlim_t = ulong_long
+rbx.platform.typedef.sa_family_t = uchar
+rbx.platform.typedef.segsz_t = int
+rbx.platform.typedef.sigset_t = uint
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.swblk_t = int
+rbx.platform.typedef.time_t = long_long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_int16_t = ushort
+rbx.platform.typedef.u_int32_t = uint
+rbx.platform.typedef.u_int64_t = ulong_long
+rbx.platform.typedef.u_int8_t = uchar
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_quad_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.vaddr_t = ulong
+rbx.platform.typedef.vsize_t = ulong
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-solaris/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-solaris/types.conf
new file mode 100644
index 0000000..a7890d1
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-solaris/types.conf
@@ -0,0 +1,122 @@
+rbx.platform.typedef.*caddr_t = char
+rbx.platform.typedef.blkcnt64_t = long
+rbx.platform.typedef.blkcnt_t = long
+rbx.platform.typedef.blksize_t = int
+rbx.platform.typedef.clock_t = long
+rbx.platform.typedef.clockid_t = int
+rbx.platform.typedef.cnt_t = short
+rbx.platform.typedef.cpu_flag_t = ushort
+rbx.platform.typedef.ctid_t = int
+rbx.platform.typedef.daddr_t = long
+rbx.platform.typedef.datalink_id_t = uint
+rbx.platform.typedef.dev_t = ulong
+rbx.platform.typedef.diskaddr_t = ulong_long
+rbx.platform.typedef.disp_lock_t = uchar
+rbx.platform.typedef.fd_mask = long
+rbx.platform.typedef.fds_mask = long
+rbx.platform.typedef.fsblkcnt64_t = ulong
+rbx.platform.typedef.fsblkcnt_t = ulong
+rbx.platform.typedef.fsfilcnt64_t = ulong
+rbx.platform.typedef.fsfilcnt_t = ulong
+rbx.platform.typedef.gid_t = uint
+rbx.platform.typedef.hrtime_t = long_long
+rbx.platform.typedef.id_t = int
+rbx.platform.typedef.in_addr_t = uint
+rbx.platform.typedef.in_port_t = ushort
+rbx.platform.typedef.index_t = short
+rbx.platform.typedef.ino64_t = ulong
+rbx.platform.typedef.ino_t = ulong
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = int
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long
+rbx.platform.typedef.intptr_t = long
+rbx.platform.typedef.ipaddr_t = uint
+rbx.platform.typedef.k_fltset_t = uint
+rbx.platform.typedef.key_t = int
+rbx.platform.typedef.len_t = ulong_long
+rbx.platform.typedef.lgrp_id_t = int
+rbx.platform.typedef.lock_t = uchar
+rbx.platform.typedef.longlong_t = long_long
+rbx.platform.typedef.major_t = uint
+rbx.platform.typedef.minor_t = uint
+rbx.platform.typedef.mode_t = uint
+rbx.platform.typedef.model_t = uint
+rbx.platform.typedef.nfds_t = ulong
+rbx.platform.typedef.nlink_t = uint
+rbx.platform.typedef.o_dev_t = short
+rbx.platform.typedef.o_gid_t = ushort
+rbx.platform.typedef.o_ino_t = ushort
+rbx.platform.typedef.o_mode_t = ushort
+rbx.platform.typedef.o_nlink_t = short
+rbx.platform.typedef.o_pid_t = short
+rbx.platform.typedef.o_uid_t = ushort
+rbx.platform.typedef.off64_t = long
+rbx.platform.typedef.off_t = long
+rbx.platform.typedef.offset_t = long_long
+rbx.platform.typedef.pad64_t = long
+rbx.platform.typedef.pfn_t = ulong
+rbx.platform.typedef.pgcnt_t = ulong
+rbx.platform.typedef.pid_t = int
+rbx.platform.typedef.poolid_t = int
+rbx.platform.typedef.pri_t = short
+rbx.platform.typedef.projid_t = int
+rbx.platform.typedef.pthread_key_t = uint
+rbx.platform.typedef.pthread_t = uint
+rbx.platform.typedef.ptrdiff_t = long
+rbx.platform.typedef.rlim64_t = ulong_long
+rbx.platform.typedef.rlim_t = ulong
+rbx.platform.typedef.sa_family_t = ushort
+rbx.platform.typedef.size_t = ulong
+rbx.platform.typedef.socklen_t = uint
+rbx.platform.typedef.spgcnt_t = long
+rbx.platform.typedef.ssize_t = long
+rbx.platform.typedef.suseconds_t = long
+rbx.platform.typedef.sysid_t = short
+rbx.platform.typedef.t_scalar_t = int
+rbx.platform.typedef.t_uscalar_t = uint
+rbx.platform.typedef.taskid_t = int
+rbx.platform.typedef.time_t = long
+rbx.platform.typedef.timer_t = int
+rbx.platform.typedef.u_char = uchar
+rbx.platform.typedef.u_int = uint
+rbx.platform.typedef.u_long = ulong
+rbx.platform.typedef.u_longlong_t = ulong_long
+rbx.platform.typedef.u_offset_t = ulong_long
+rbx.platform.typedef.u_short = ushort
+rbx.platform.typedef.uchar_t = uchar
+rbx.platform.typedef.uid_t = uint
+rbx.platform.typedef.uint = uint
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint32_t = uint
+rbx.platform.typedef.uint64_t = ulong
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = uint
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least32_t = uint
+rbx.platform.typedef.uint_least64_t = ulong
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uint_t = uint
+rbx.platform.typedef.uintmax_t = ulong
+rbx.platform.typedef.uintptr_t = ulong
+rbx.platform.typedef.ulong = ulong
+rbx.platform.typedef.ulong_t = ulong
+rbx.platform.typedef.unchar = uchar
+rbx.platform.typedef.upad64_t = ulong
+rbx.platform.typedef.use_t = uchar
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.ushort = ushort
+rbx.platform.typedef.ushort_t = ushort
+rbx.platform.typedef.zoneid_t = int
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-windows/types.conf b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-windows/types.conf
new file mode 100644
index 0000000..5bdbbde
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/platform/x86_64-windows/types.conf
@@ -0,0 +1,52 @@
+rbx.platform.typedef.__time32_t = long
+rbx.platform.typedef.__time64_t = long_long
+rbx.platform.typedef._dev_t = uint
+rbx.platform.typedef._ino_t = ushort
+rbx.platform.typedef._mode_t = ushort
+rbx.platform.typedef._off64_t = long_long
+rbx.platform.typedef._off_t = long
+rbx.platform.typedef._pid_t = long_long
+rbx.platform.typedef._sigset_t = ulong_long
+rbx.platform.typedef.dev_t = uint
+rbx.platform.typedef.errno_t = int
+rbx.platform.typedef.ino_t = ushort
+rbx.platform.typedef.int16_t = short
+rbx.platform.typedef.int32_t = int
+rbx.platform.typedef.int64_t = long_long
+rbx.platform.typedef.int8_t = char
+rbx.platform.typedef.int_fast16_t = short
+rbx.platform.typedef.int_fast32_t = int
+rbx.platform.typedef.int_fast64_t = long_long
+rbx.platform.typedef.int_fast8_t = char
+rbx.platform.typedef.int_least16_t = short
+rbx.platform.typedef.int_least32_t = int
+rbx.platform.typedef.int_least64_t = long_long
+rbx.platform.typedef.int_least8_t = char
+rbx.platform.typedef.intmax_t = long_long
+rbx.platform.typedef.intptr_t = long_long
+rbx.platform.typedef.mode_t = ushort
+rbx.platform.typedef.off32_t = long
+rbx.platform.typedef.off64_t = long_long
+rbx.platform.typedef.off_t = long_long
+rbx.platform.typedef.pid_t = long_long
+rbx.platform.typedef.ptrdiff_t = long_long
+rbx.platform.typedef.rsize_t = ulong_long
+rbx.platform.typedef.size_t = ulong_long
+rbx.platform.typedef.ssize_t = long_long
+rbx.platform.typedef.time_t = long_long
+rbx.platform.typedef.uint16_t = ushort
+rbx.platform.typedef.uint64_t = ulong_long
+rbx.platform.typedef.uint8_t = uchar
+rbx.platform.typedef.uint_fast16_t = ushort
+rbx.platform.typedef.uint_fast32_t = uint
+rbx.platform.typedef.uint_fast64_t = ulong_long
+rbx.platform.typedef.uint_fast8_t = uchar
+rbx.platform.typedef.uint_least16_t = ushort
+rbx.platform.typedef.uint_least64_t = ulong_long
+rbx.platform.typedef.uint_least8_t = uchar
+rbx.platform.typedef.uintmax_t = ulong_long
+rbx.platform.typedef.uintptr_t = ulong_long
+rbx.platform.typedef.useconds_t = uint
+rbx.platform.typedef.wchar_t = ushort
+rbx.platform.typedef.wctype_t = ushort
+rbx.platform.typedef.wint_t = ushort
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/pointer.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/pointer.rb
new file mode 100644
index 0000000..e65835f
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/pointer.rb
@@ -0,0 +1,167 @@
+#
+# Copyright (C) 2008, 2009 Wayne Meissner
+# Copyright (c) 2007, 2008 Evan Phoenix
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+require 'ffi/platform'
+
+# NOTE: all method definitions in this file are conditional on
+# whether they are not already defined. This is needed because
+# some Ruby implementations (e.g., TruffleRuby) might already
+# provide these methods due to using FFI internally, and we
+# should not override them to avoid warnings.
+
+module FFI
+ class Pointer
+
+ # Pointer size
+ SIZE = Platform::ADDRESS_SIZE / 8 unless const_defined?(:SIZE)
+
+ # Return the size of a pointer on the current platform, in bytes
+ # @return [Integer]
+ def self.size
+ SIZE
+ end unless respond_to?(:size)
+
+ # @param [nil,Integer] len length of string to return
+ # @return [String]
+ # Read pointer's contents as a string, or the first +len+ bytes of the
+ # equivalent string if +len+ is not +nil+.
+ def read_string(len=nil)
+ if len
+ return ''.b if len == 0
+ get_bytes(0, len)
+ else
+ get_string(0)
+ end
+ end unless method_defined?(:read_string)
+
+ # @param [Integer] len length of string to return
+ # @return [String]
+ # Read the first +len+ bytes of pointer's contents as a string.
+ #
+ # Same as:
+ # ptr.read_string(len) # with len not nil
+ def read_string_length(len)
+ get_bytes(0, len)
+ end unless method_defined?(:read_string_length)
+
+ # @return [String]
+ # Read pointer's contents as a string.
+ #
+ # Same as:
+ # ptr.read_string # with no len
+ def read_string_to_null
+ get_string(0)
+ end unless method_defined?(:read_string_to_null)
+
+ # @param [String] str string to write
+ # @param [Integer] len length of string to return
+ # @return [self]
+ # Write +len+ first bytes of +str+ in pointer's contents.
+ #
+ # Same as:
+ # ptr.write_string(str, len) # with len not nil
+ def write_string_length(str, len)
+ put_bytes(0, str, 0, len)
+ end unless method_defined?(:write_string_length)
+
+ # @param [String] str string to write
+ # @param [Integer] len length of string to return
+ # @return [self]
+ # Write +str+ in pointer's contents, or first +len+ bytes if
+ # +len+ is not +nil+.
+ def write_string(str, len=nil)
+ len = str.bytesize unless len
+ # Write the string data without NUL termination
+ put_bytes(0, str, 0, len)
+ end unless method_defined?(:write_string)
+
+ # @param [Type] type type of data to read from pointer's contents
+ # @param [Symbol] reader method to send to +self+ to read +type+
+ # @param [Integer] length
+ # @return [Array]
+ # Read an array of +type+ of length +length+.
+ # @example
+ # ptr.read_array_of_type(TYPE_UINT8, :read_uint8, 4) # -> [1, 2, 3, 4]
+ def read_array_of_type(type, reader, length)
+ ary = []
+ size = FFI.type_size(type)
+ tmp = self
+ length.times { |j|
+ ary << tmp.send(reader)
+ tmp += size unless j == length-1 # avoid OOB
+ }
+ ary
+ end unless method_defined?(:read_array_of_type)
+
+ # @param [Type] type type of data to write to pointer's contents
+ # @param [Symbol] writer method to send to +self+ to write +type+
+ # @param [Array] ary
+ # @return [self]
+ # Write +ary+ in pointer's contents as +type+.
+ # @example
+ # ptr.write_array_of_type(TYPE_UINT8, :put_uint8, [1, 2, 3 ,4])
+ def write_array_of_type(type, writer, ary)
+ size = FFI.type_size(type)
+ ary.each_with_index { |val, i|
+ break unless i < self.size
+ self.send(writer, i * size, val)
+ }
+ self
+ end unless method_defined?(:write_array_of_type)
+
+ # @return [self]
+ def to_ptr
+ self
+ end unless method_defined?(:to_ptr)
+
+ # @param [Symbol,Type] type of data to read
+ # @return [Object]
+ # Read pointer's contents as +type+
+ #
+ # Same as:
+ # ptr.get(type, 0)
+ def read(type)
+ get(type, 0)
+ end unless method_defined?(:read)
+
+ # @param [Symbol,Type] type of data to read
+ # @param [Object] value to write
+ # @return [nil]
+ # Write +value+ of type +type+ to pointer's content
+ #
+ # Same as:
+ # ptr.put(type, 0)
+ def write(type, value)
+ put(type, 0, value)
+ end unless method_defined?(:write)
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct.rb
new file mode 100644
index 0000000..bf6228a
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct.rb
@@ -0,0 +1,317 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+# Copyright (C) 2008, 2009 Andrea Fazzi
+# Copyright (C) 2008, 2009 Luc Heinrich
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+require 'ffi/platform'
+require 'ffi/struct_layout'
+require 'ffi/struct_layout_builder'
+require 'ffi/struct_by_reference'
+
+module FFI
+
+ class Struct
+
+ # Get struct size
+ # @return [Integer]
+ def size
+ self.class.size
+ end
+
+ # @return [Integer] Struct alignment
+ def alignment
+ self.class.alignment
+ end
+ alias_method :align, :alignment
+
+ # (see FFI::StructLayout#offset_of)
+ def offset_of(name)
+ self.class.offset_of(name)
+ end
+
+ # (see FFI::StructLayout#members)
+ def members
+ self.class.members
+ end
+
+ # @return [Array]
+ # Get array of values from Struct fields.
+ def values
+ members.map { |m| self[m] }
+ end
+
+ # (see FFI::StructLayout#offsets)
+ def offsets
+ self.class.offsets
+ end
+
+ # Clear the struct content.
+ # @return [self]
+ def clear
+ pointer.clear
+ self
+ end
+
+ # Get {Pointer} to struct content.
+ # @return [AbstractMemory]
+ def to_ptr
+ pointer
+ end
+
+ # Get struct size
+ # @return [Integer]
+ def self.size
+ defined?(@layout) ? @layout.size : defined?(@size) ? @size : 0
+ end
+
+ # set struct size
+ # @param [Integer] size
+ # @return [size]
+ def self.size=(size)
+ raise ArgumentError, "Size already set" if defined?(@size) || defined?(@layout)
+ @size = size
+ end
+
+ # @return (see Struct#alignment)
+ def self.alignment
+ @layout.alignment
+ end
+
+ # (see FFI::Type#members)
+ def self.members
+ @layout.members
+ end
+
+ # (see FFI::StructLayout#offsets)
+ def self.offsets
+ @layout.offsets
+ end
+
+ # (see FFI::StructLayout#offset_of)
+ def self.offset_of(name)
+ @layout.offset_of(name)
+ end
+
+ def self.in
+ ptr(:in)
+ end
+
+ def self.out
+ ptr(:out)
+ end
+
+ def self.ptr(flags = :inout)
+ @ref_data_type ||= Type::Mapped.new(StructByReference.new(self))
+ end
+
+ def self.val
+ @val_data_type ||= StructByValue.new(self)
+ end
+
+ def self.by_value
+ self.val
+ end
+
+ def self.by_ref(flags = :inout)
+ self.ptr(flags)
+ end
+
+ class ManagedStructConverter < StructByReference
+
+ # @param [Struct] struct_class
+ def initialize(struct_class)
+ super(struct_class)
+
+ raise NoMethodError, "release() not implemented for class #{struct_class}" unless struct_class.respond_to? :release
+ @method = struct_class.method(:release)
+ end
+
+ # @param [Pointer] ptr
+ # @param [nil] ctx
+ # @return [Struct]
+ def from_native(ptr, ctx)
+ struct_class.new(AutoPointer.new(ptr, @method))
+ end
+ end
+
+ def self.auto_ptr
+ @managed_type ||= Type::Mapped.new(ManagedStructConverter.new(self))
+ end
+
+
+ class << self
+ public
+
+ # @return [StructLayout]
+ # @overload layout
+ # @return [StructLayout]
+ # Get struct layout.
+ # @overload layout(*spec)
+ # @param [Array<Symbol, Integer>,Array(Hash)] spec
+ # @return [StructLayout]
+ # Create struct layout from +spec+.
+ # @example Creating a layout from an array +spec+
+ # class MyStruct < Struct
+ # layout :field1, :int,
+ # :field2, :pointer,
+ # :field3, :string
+ # end
+ # @example Creating a layout from an array +spec+ with offset
+ # class MyStructWithOffset < Struct
+ # layout :field1, :int,
+ # :field2, :pointer, 6, # set offset to 6 for this field
+ # :field3, :string
+ # end
+ # @example Creating a layout from a hash +spec+
+ # class MyStructFromHash < Struct
+ # layout :field1 => :int,
+ # :field2 => :pointer,
+ # :field3 => :string
+ # end
+ # @example Creating a layout with pointers to functions
+ # class MyFunctionTable < Struct
+ # layout :function1, callback([:int, :int], :int),
+ # :function2, callback([:pointer], :void),
+ # :field3, :string
+ # end
+ def layout(*spec)
+ return @layout if spec.size == 0
+
+ warn "[DEPRECATION] Struct layout is already defined for class #{self.inspect}. Redefinition as in #{caller[0]} will be disallowed in ffi-2.0." if defined?(@layout)
+
+ builder = StructLayoutBuilder.new
+ builder.union = self < Union
+ builder.packed = @packed if defined?(@packed)
+ builder.alignment = @min_alignment if defined?(@min_alignment)
+
+ if spec[0].kind_of?(Hash)
+ hash_layout(builder, spec)
+ else
+ array_layout(builder, spec)
+ end
+ builder.size = @size if defined?(@size) && @size > builder.size
+ cspec = builder.build
+ @layout = cspec unless self == Struct
+ @size = cspec.size
+ return cspec
+ end
+
+
+ protected
+
+ def callback(params, ret)
+ mod = enclosing_module
+ ret_type = find_type(ret, mod)
+ if ret_type == Type::STRING
+ raise TypeError, ":string is not allowed as return type of callbacks"
+ end
+ FFI::CallbackInfo.new(ret_type, params.map { |e| find_type(e, mod) })
+ end
+
+ def packed(packed = 1)
+ @packed = packed
+ end
+ alias :pack :packed
+
+ def aligned(alignment = 1)
+ @min_alignment = alignment
+ end
+ alias :align :aligned
+
+ def enclosing_module
+ begin
+ mod = self.name.split("::")[0..-2].inject(Object) { |obj, c| obj.const_get(c) }
+ if mod.respond_to?(:find_type) && (mod.is_a?(FFI::Library) || mod < FFI::Struct)
+ mod
+ end
+ rescue Exception
+ nil
+ end
+ end
+
+
+ def find_field_type(type, mod = enclosing_module)
+ if type.kind_of?(Class) && type < Struct
+ FFI::Type::Struct.new(type)
+
+ elsif type.kind_of?(Class) && type < FFI::StructLayout::Field
+ type
+
+ elsif type.kind_of?(::Array)
+ FFI::Type::Array.new(find_field_type(type[0]), type[1])
+
+ else
+ find_type(type, mod)
+ end
+ end
+
+ def find_type(type, mod = enclosing_module)
+ if mod
+ mod.find_type(type)
+ end || FFI.find_type(type)
+ end
+
+ private
+
+ # @param [StructLayoutBuilder] builder
+ # @param [Hash] spec
+ # @return [builder]
+ # Add hash +spec+ to +builder+.
+ def hash_layout(builder, spec)
+ spec[0].each do |name, type|
+ builder.add name, find_field_type(type), nil
+ end
+ end
+
+ # @param [StructLayoutBuilder] builder
+ # @param [Array<Symbol, Integer>] spec
+ # @return [builder]
+ # Add array +spec+ to +builder+.
+ def array_layout(builder, spec)
+ i = 0
+ while i < spec.size
+ name, type = spec[i, 2]
+ i += 2
+
+ # If the next param is a Integer, it specifies the offset
+ if spec[i].kind_of?(Integer)
+ offset = spec[i]
+ i += 1
+ else
+ offset = nil
+ end
+
+ builder.add name, find_field_type(type), offset
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_by_reference.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_by_reference.rb
new file mode 100644
index 0000000..27f25ec
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_by_reference.rb
@@ -0,0 +1,72 @@
+#
+# Copyright (C) 2010 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
+
+module FFI
+ # This class includes the {FFI::DataConverter} module.
+ class StructByReference
+ include DataConverter
+
+ attr_reader :struct_class
+
+ # @param [Struct] struct_class
+ def initialize(struct_class)
+ unless Class === struct_class and struct_class < FFI::Struct
+ raise TypeError, 'wrong type (expected subclass of FFI::Struct)'
+ end
+ @struct_class = struct_class
+ end
+
+ # Always get {FFI::Type}::POINTER.
+ def native_type
+ FFI::Type::POINTER
+ end
+
+ # @param [nil, Struct] value
+ # @param [nil] ctx
+ # @return [AbstractMemory] Pointer on +value+.
+ def to_native(value, ctx)
+ return Pointer::NULL if value.nil?
+
+ unless @struct_class === value
+ raise TypeError, "wrong argument type #{value.class} (expected #{@struct_class})"
+ end
+
+ value.pointer
+ end
+
+ # @param [AbstractMemory] value
+ # @param [nil] ctx
+ # @return [Struct]
+ # Create a struct from content of memory +value+.
+ def from_native(value, ctx)
+ @struct_class.new(value)
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout.rb
new file mode 100644
index 0000000..fb84202
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout.rb
@@ -0,0 +1,96 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+# Copyright (C) 2008, 2009 Andrea Fazzi
+# Copyright (C) 2008, 2009 Luc Heinrich
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+module FFI
+
+ class StructLayout
+
+ # @return [Array<Array(Symbol, Integer)>
+ # Get an array of tuples (field name, offset of the field).
+ def offsets
+ members.map { |m| [ m, self[m].offset ] }
+ end
+
+ # @return [Integer]
+ # Get the offset of a field.
+ def offset_of(field_name)
+ self[field_name].offset
+ end
+
+ # An enum {Field} in a {StructLayout}.
+ class Enum < Field
+
+ # @param [AbstractMemory] ptr pointer on a {Struct}
+ # @return [Object]
+ # Get an object of type {#type} from memory pointed by +ptr+.
+ def get(ptr)
+ type.find(ptr.get_int(offset))
+ end
+
+ # @param [AbstractMemory] ptr pointer on a {Struct}
+ # @param value
+ # @return [nil]
+ # Set +value+ into memory pointed by +ptr+.
+ def put(ptr, value)
+ ptr.put_int(offset, type.find(value))
+ end
+
+ end
+
+ class InnerStruct < Field
+ def get(ptr)
+ type.struct_class.new(ptr.slice(self.offset, self.size))
+ end
+
+ def put(ptr, value)
+ raise TypeError, "wrong value type (expected #{type.struct_class})" unless value.is_a?(type.struct_class)
+ ptr.slice(self.offset, self.size).__copy_from__(value.pointer, self.size)
+ end
+ end
+
+ class Mapped < Field
+ def initialize(name, offset, type, orig_field)
+ @orig_field = orig_field
+ super(name, offset, type)
+ end
+
+ def get(ptr)
+ type.from_native(@orig_field.get(ptr), nil)
+ end
+
+ def put(ptr, value)
+ @orig_field.put(ptr, type.to_native(value, nil))
+ end
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout_builder.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout_builder.rb
new file mode 100644
index 0000000..2221a60
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/struct_layout_builder.rb
@@ -0,0 +1,227 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+module FFI
+
+ # Build a {StructLayout struct layout}.
+ class StructLayoutBuilder
+ attr_reader :size
+ attr_reader :alignment
+
+ def initialize
+ @size = 0
+ @alignment = 1
+ @min_alignment = 1
+ @packed = false
+ @union = false
+ @fields = Array.new
+ end
+
+ # Set size attribute with +size+ only if +size+ is greater than attribute value.
+ # @param [Integer] size
+ def size=(size)
+ @size = size if size > @size
+ end
+
+ # Set alignment attribute with +align+ only if it is greater than attribute value.
+ # @param [Integer] align
+ def alignment=(align)
+ @alignment = align if align > @alignment
+ @min_alignment = align
+ end
+
+ # Set union attribute.
+ # Set to +true+ to build a {Union} instead of a {Struct}.
+ # @param [Boolean] is_union
+ # @return [is_union]
+ def union=(is_union)
+ @union = is_union
+ end
+
+ # Building a {Union} or a {Struct} ?
+ #
+ # @return [Boolean]
+ #
+ def union?
+ @union
+ end
+
+ # Set packed attribute
+ # @overload packed=(packed) Set alignment and packed attributes to
+ # +packed+.
+ #
+ # @param [Integer] packed
+ #
+ # @return [packed]
+ # @overload packed=(packed) Set packed attribute.
+ # @param packed
+ #
+ # @return [0,1]
+ #
+ def packed=(packed)
+ if packed.is_a?(0.class)
+ @alignment = packed
+ @packed = packed
+ else
+ @packed = packed ? 1 : 0
+ end
+ end
+
+
+ # List of number types
+ NUMBER_TYPES = [
+ Type::INT8,
+ Type::UINT8,
+ Type::INT16,
+ Type::UINT16,
+ Type::INT32,
+ Type::UINT32,
+ Type::LONG,
+ Type::ULONG,
+ Type::INT64,
+ Type::UINT64,
+ Type::FLOAT32,
+ Type::FLOAT64,
+ Type::LONGDOUBLE,
+ Type::BOOL,
+ ].freeze
+
+ # @param [String, Symbol] name name of the field
+ # @param [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type type of the field
+ # @param [Integer, nil] offset
+ # @return [self]
+ # Add a field to the builder.
+ # @note Setting +offset+ to +nil+ or +-1+ is equivalent to +0+.
+ def add(name, type, offset = nil)
+
+ if offset.nil? || offset == -1
+ offset = @union ? 0 : align(@size, @packed ? [ @packed, type.alignment ].min : [ @min_alignment, type.alignment ].max)
+ end
+
+ #
+ # If a FFI::Type type was passed in as the field arg, try and convert to a StructLayout::Field instance
+ #
+ field = type.is_a?(StructLayout::Field) ? type : field_for_type(name, offset, type)
+ @fields << field
+ @alignment = [ @alignment, field.alignment ].max unless @packed
+ @size = [ @size, field.size + (@union ? 0 : field.offset) ].max
+
+ return self
+ end
+
+ # @param (see #add)
+ # @return (see #add)
+ # Same as {#add}.
+ # @see #add
+ def add_field(name, type, offset = nil)
+ add(name, type, offset)
+ end
+
+ # @param (see #add)
+ # @return (see #add)
+ # Add a struct as a field to the builder.
+ def add_struct(name, type, offset = nil)
+ add(name, Type::Struct.new(type), offset)
+ end
+
+ # @param name (see #add)
+ # @param type (see #add)
+ # @param [Integer] count array length
+ # @param offset (see #add)
+ # @return (see #add)
+ # Add an array as a field to the builder.
+ def add_array(name, type, count, offset = nil)
+ add(name, Type::Array.new(type, count), offset)
+ end
+
+ # @return [StructLayout]
+ # Build and return the struct layout.
+ def build
+ # Add tail padding if the struct is not packed
+ size = @packed ? @size : align(@size, @alignment)
+
+ layout = StructLayout.new(@fields, size, @alignment)
+ layout.__union! if @union
+ layout
+ end
+
+ private
+
+ # @param [Integer] offset
+ # @param [Integer] align
+ # @return [Integer]
+ def align(offset, align)
+ align + ((offset - 1) & ~(align - 1));
+ end
+
+ # @param (see #add)
+ # @return [StructLayout::Field]
+ def field_for_type(name, offset, type)
+ field_class = case
+ when type.is_a?(Type::Function)
+ StructLayout::Function
+
+ when type.is_a?(Type::Struct)
+ StructLayout::InnerStruct
+
+ when type.is_a?(Type::Array)
+ StructLayout::Array
+
+ when type.is_a?(FFI::Enum)
+ StructLayout::Enum
+
+ when NUMBER_TYPES.include?(type)
+ StructLayout::Number
+
+ when type == Type::POINTER
+ StructLayout::Pointer
+
+ when type == Type::STRING
+ StructLayout::String
+
+ when type.is_a?(Class) && type < StructLayout::Field
+ type
+
+ when type.is_a?(DataConverter)
+ return StructLayout::Mapped.new(name, offset, Type::Mapped.new(type), field_for_type(name, offset, type.native_type))
+
+ when type.is_a?(Type::Mapped)
+ return StructLayout::Mapped.new(name, offset, type, field_for_type(name, offset, type.native_type))
+
+ else
+ raise TypeError, "invalid struct field type #{type.inspect}"
+ end
+
+ field_class.new(name, offset, type)
+ end
+ end
+
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/const_generator.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/const_generator.rb
new file mode 100644
index 0000000..70ba9c2
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/const_generator.rb
@@ -0,0 +1,232 @@
+require 'tempfile'
+require 'open3'
+
+module FFI
+
+ # ConstGenerator turns C constants into ruby values.
+ #
+ # @example a simple example for stdio
+ # require 'ffi/tools/const_generator'
+ # cg = FFI::ConstGenerator.new('stdio') do |gen|
+ # gen.const(:SEEK_SET)
+ # gen.const('SEEK_CUR')
+ # gen.const('seek_end') # this constant does not exist
+ # end # #calculate called automatically at the end of the block
+ #
+ # cg['SEEK_SET'] # => 0
+ # cg['SEEK_CUR'] # => 1
+ # cg['seek_end'] # => nil
+ # cg.to_ruby # => "SEEK_SET = 0\nSEEK_CUR = 1\n# seek_end not available"
+ class ConstGenerator
+ @options = {}
+ attr_reader :constants
+
+ # Creates a new constant generator that uses +prefix+ as a name, and an
+ # options hash.
+ #
+ # The only option is +:required+, which if set to +true+ raises an error if a
+ # constant you have requested was not found.
+ #
+ # @param [#to_s] prefix
+ # @param [Hash] options
+ # @return
+ # @option options [Boolean] :required
+ # @overload initialize(prefix, options)
+ # @overload initialize(prefix, options) { |gen| ... }
+ # @yieldparam [ConstGenerator] gen new generator is passed to the block
+ # When passed a block, {#calculate} is automatically called at the end of
+ # the block, otherwise you must call it yourself.
+ def initialize(prefix = nil, options = {})
+ @includes = ['stdio.h', 'stddef.h']
+ @constants = {}
+ @prefix = prefix
+
+ @required = options[:required]
+ @options = options
+
+ if block_given? then
+ yield self
+ calculate self.class.options.merge(options)
+ end
+ end
+ # Set class options
+ # These options are merged with {#initialize} options when it is called with a block.
+ # @param [Hash] options
+ # @return [Hash] class options
+ def self.options=(options)
+ @options = options
+ end
+ # Get class options.
+ # @return [Hash] class options
+ def self.options
+ @options
+ end
+ # @param [String] name
+ # @return constant value (converted if a +converter+ was defined).
+ # Access a constant by name.
+ def [](name)
+ @constants[name].converted_value
+ end
+
+ # Request the value for C constant +name+.
+ #
+ # @param [#to_s] name C constant name
+ # @param [String] format a printf format string to print the value out
+ # @param [String] cast a C cast for the value
+ # @param ruby_name alternate ruby name for {#to_ruby}
+ #
+ # @overload const(name, format=nil, cast='', ruby_name=nil, converter=nil)
+ # +converter+ is a Method or a Proc.
+ # @param [#call] converter convert the value from a string to the appropriate
+ # type for {#to_ruby}.
+ # @overload const(name, format=nil, cast='', ruby_name=nil) { |value| ... }
+ # Use a converter block. This block convert the value from a string to the
+ # appropriate type for {#to_ruby}.
+ # @yieldparam value constant value
+ def const(name, format = nil, cast = '', ruby_name = nil, converter = nil,
+ &converter_proc)
+ format ||= '%d'
+ cast ||= ''
+
+ if converter_proc and converter then
+ raise ArgumentError, "Supply only converter or converter block"
+ end
+
+ converter = converter_proc if converter.nil?
+
+ const = Constant.new name, format, cast, ruby_name, converter
+ @constants[name.to_s] = const
+ return const
+ end
+
+ # Calculate constants values.
+ # @param [Hash] options
+ # @option options [String] :cppflags flags for C compiler
+ # @return [nil]
+ # @raise if a constant is missing and +:required+ was set to +true+ (see {#initialize})
+ def calculate(options = {})
+ binary_path = nil
+
+ Tempfile.open("#{@prefix}.const_generator") do |f|
+ binary_path = f.path + ".bin"
+ @includes.each do |inc|
+ f.puts "#include <#{inc}>"
+ end
+ f.puts "\nint main(int argc, char **argv)\n{"
+
+ @constants.each_value do |const|
+ f.puts <<-EOF
+ #ifdef #{const.name}
+ printf("#{const.name} #{const.format}\\n", #{const.cast}#{const.name});
+ #endif
+ EOF
+ end
+
+ f.puts "\n\treturn 0;\n}"
+ f.flush
+
+ cc = ENV['CC'] || 'gcc'
+ output = `#{cc} #{options[:cppflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{binary_path} 2>&1`
+
+ unless $?.success? then
+ output = output.split("\n").map { |l| "\t#{l}" }.join "\n"
+ raise "Compilation error generating constants #{@prefix}:\n#{output}"
+ end
+ end
+
+ output = `#{binary_path}`
+ File.unlink(binary_path + (FFI::Platform.windows? ? ".exe" : ""))
+ output.each_line do |line|
+ line =~ /^(\S+)\s(.*)$/
+ const = @constants[$1]
+ const.value = $2
+ end
+
+ missing_constants = @constants.select do |name, constant|
+ constant.value.nil?
+ end.map { |name,| name }
+
+ if @required and not missing_constants.empty? then
+ raise "Missing required constants for #{@prefix}: #{missing_constants.join ', '}"
+ end
+ end
+
+ # Dump constants to +io+.
+ # @param [#puts] io
+ # @return [nil]
+ def dump_constants(io)
+ @constants.each do |name, constant|
+ name = [@prefix, name].join '.' if @prefix
+ io.puts "#{name} = #{constant.converted_value}"
+ end
+ end
+
+ # Outputs values for discovered constants. If the constant's value was
+ # not discovered it is not omitted.
+ # @return [String]
+ def to_ruby
+ @constants.sort_by { |name,| name }.map do |name, constant|
+ if constant.value.nil? then
+ "# #{name} not available"
+ else
+ constant.to_ruby
+ end
+ end.join "\n"
+ end
+
+ # Add additional C include file(s) to calculate constants from.
+ # @note +stdio.h+ and +stddef.h+ automatically included
+ # @param [List<String>, Array<String>] i include file(s)
+ # @return [Array<String>] array of include files
+ def include(*i)
+ @includes |= i.flatten
+ end
+
+ end
+
+ # This class hold constants for {ConstGenerator}
+ class ConstGenerator::Constant
+
+ attr_reader :name, :format, :cast
+ attr_accessor :value
+
+ # @param [#to_s] name
+ # @param [String] format a printf format string to print the value out
+ # @param [String] cast a C cast for the value
+ # @param ruby_name alternate ruby name for {#to_ruby}
+ # @param [#call] converter convert the value from a string to the appropriate
+ # type for {#to_ruby}.
+ def initialize(name, format, cast, ruby_name = nil, converter=nil)
+ @name = name
+ @format = format
+ @cast = cast
+ @ruby_name = ruby_name
+ @converter = converter
+ @value = nil
+ end
+
+ # Return constant value (converted if a +converter+ was defined).
+ # @return constant value.
+ def converted_value
+ if @converter
+ @converter.call(@value)
+ else
+ @value
+ end
+ end
+
+ # get constant ruby name
+ # @return [String]
+ def ruby_name
+ @ruby_name || @name
+ end
+
+ # Get an evaluable string from constant.
+ # @return [String]
+ def to_ruby
+ "#{ruby_name} = #{converted_value}"
+ end
+
+ end
+
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator.rb
new file mode 100644
index 0000000..5552ea5
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator.rb
@@ -0,0 +1,105 @@
+require 'ffi/tools/struct_generator'
+require 'ffi/tools/const_generator'
+
+module FFI
+
+ ##
+ # Generate files with C structs for FFI::Struct and C constants.
+ #
+ # == A simple example
+ #
+ # In file +zlib.rb.ffi+:
+ # module Zlib
+ # @@@
+ # constants do |c|
+ # c.include "zlib.h"
+ # c.const :ZLIB_VERNUM
+ # end
+ # @@@
+ #
+ # class ZStream < FFI::Struct
+ #
+ # struct do |s|
+ # s.name "struct z_stream_s"
+ # s.include "zlib.h"
+ #
+ # s.field :next_in, :pointer
+ # s.field :avail_in, :uint
+ # s.field :total_in, :ulong
+ # end
+ # @@@
+ # end
+ # end
+ #
+ # Translate the file:
+ # require "ffi/tools/generator"
+ # FFI::Generator.new "zlib.rb.ffi", "zlib.rb"
+ #
+ # Generates the file +zlib.rb+ with constant values and offsets:
+ # module Zlib
+ # ZLIB_VERNUM = 4784
+ #
+ # class ZStream < FFI::Struct
+ # layout :next_in, :pointer, 0,
+ # :avail_in, :uint, 8,
+ # :total_in, :ulong, 16
+ # end
+ #
+ # @see FFI::Generator::Task for easy integration in a Rakefile
+ class Generator
+
+ def initialize(ffi_name, rb_name, options = {})
+ @ffi_name = ffi_name
+ @rb_name = rb_name
+ @options = options
+ @name = File.basename rb_name, '.rb'
+
+ file = File.read @ffi_name
+
+ new_file = file.gsub(/^( *)@@@(.*?)@@@/m) do
+ @constants = []
+ @structs = []
+
+ indent = $1
+ original_lines = $2.count "\n"
+
+ instance_eval $2, @ffi_name, $`.count("\n")
+
+ new_lines = []
+ @constants.each { |c| new_lines << c.to_ruby }
+ @structs.each { |s| new_lines << s.generate_layout }
+
+ new_lines = new_lines.join("\n").split "\n" # expand multiline blocks
+ new_lines = new_lines.map { |line| indent + line }
+
+ padding = original_lines - new_lines.length
+ new_lines += [nil] * padding if padding >= 0
+
+ new_lines.join "\n"
+ end
+
+ open @rb_name, 'w' do |f|
+ f.puts "# This file is generated from `#{@ffi_name}'. Do not edit."
+ f.puts
+ f.puts new_file
+ end
+ end
+
+ def constants(options = {}, &block)
+ @constants << FFI::ConstGenerator.new(@name, @options.merge(options), &block)
+ end
+
+ def struct(options = {}, &block)
+ @structs << FFI::StructGenerator.new(@name, @options.merge(options), &block)
+ end
+
+ ##
+ # Utility converter for constants
+
+ def to_s
+ proc { |obj| obj.to_s.inspect }
+ end
+
+ end
+end
+
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator_task.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator_task.rb
new file mode 100644
index 0000000..da72968
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/generator_task.rb
@@ -0,0 +1,32 @@
+require 'ffi/tools/generator'
+require 'rake'
+require 'rake/tasklib'
+
+##
+# Add Rake tasks that generate files with C structs for FFI::Struct and C constants.
+#
+# @example a simple example for your Rakefile
+# require "ffi/tools/generator_task"
+# # Add a task to generate my_object.rb out of my_object.rb.ffi
+# FFI::Generator::Task.new ["my_object.rb"], cflags: "-I/usr/local/mylibrary"
+#
+# The generated files are also added to the 'clear' task.
+#
+# @see FFI::Generator for a description of the file content
+class FFI::Generator::Task < Rake::TaskLib
+
+ def initialize(rb_names, options={})
+ task :clean do rm_f rb_names end
+
+ rb_names.each do |rb_name|
+ ffi_name = "#{rb_name}.ffi"
+
+ file rb_name => ffi_name do |t|
+ puts "Generating #{rb_name}..." if Rake.application.options.trace
+
+ FFI::Generator.new ffi_name, rb_name, options
+ end
+ end
+ end
+
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/struct_generator.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/struct_generator.rb
new file mode 100644
index 0000000..3a951c3
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/struct_generator.rb
@@ -0,0 +1,195 @@
+require 'tempfile'
+
+module FFI
+
+ ##
+ # Generates an FFI Struct layout.
+ #
+ # Given the @@@ portion in:
+ #
+ # class Zlib::ZStream < FFI::Struct
+ # @@@
+ # name "struct z_stream_s"
+ # include "zlib.h"
+ #
+ # field :next_in, :pointer
+ # field :avail_in, :uint
+ # field :total_in, :ulong
+ #
+ # # ...
+ # @@@
+ # end
+ #
+ # StructGenerator will create the layout:
+ #
+ # layout :next_in, :pointer, 0,
+ # :avail_in, :uint, 4,
+ # :total_in, :ulong, 8,
+ # # ...
+ #
+ # StructGenerator does its best to pad the layout it produces to preserve
+ # line numbers. Place the struct definition as close to the top of the file
+ # for best results.
+
+ class StructGenerator
+ @options = {}
+ attr_accessor :size
+ attr_reader :fields
+
+ def initialize(name, options = {})
+ @name = name
+ @struct_name = nil
+ @includes = []
+ @fields = []
+ @found = false
+ @size = nil
+
+ if block_given? then
+ yield self
+ calculate self.class.options.merge(options)
+ end
+ end
+ def self.options=(options)
+ @options = options
+ end
+ def self.options
+ @options
+ end
+ def calculate(options = {})
+ binary = File.join Dir.tmpdir, "rb_struct_gen_bin_#{Process.pid}"
+
+ raise "struct name not set" if @struct_name.nil?
+
+ Tempfile.open("#{@name}.struct_generator") do |f|
+ f.puts "#include <stdio.h>"
+
+ @includes.each do |inc|
+ f.puts "#include <#{inc}>"
+ end
+
+ f.puts "#include <stddef.h>\n\n"
+ f.puts "int main(int argc, char **argv)\n{"
+ f.puts " #{@struct_name} s;"
+ f.puts %[ printf("sizeof(#{@struct_name}) %u\\n", (unsigned int) sizeof(#{@struct_name}));]
+
+ @fields.each do |field|
+ f.puts <<-EOF
+ printf("#{field.name} %u %u\\n", (unsigned int) offsetof(#{@struct_name}, #{field.name}),
+ (unsigned int) sizeof(s.#{field.name}));
+ EOF
+ end
+
+ f.puts "\n return 0;\n}"
+ f.flush
+
+ cc = ENV['CC'] || 'gcc'
+ output = `#{cc} #{options[:cppflags]} #{options[:cflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{binary} 2>&1`
+
+ unless $?.success? then
+ @found = false
+ output = output.split("\n").map { |l| "\t#{l}" }.join "\n"
+ raise "Compilation error generating struct #{@name} (#{@struct_name}):\n#{output}"
+ end
+ end
+
+ output = `#{binary}`.split "\n"
+ File.unlink(binary + (FFI::Platform.windows? ? ".exe" : ""))
+ sizeof = output.shift
+ unless @size
+ m = /\s*sizeof\([^)]+\) (\d+)/.match sizeof
+ @size = m[1]
+ end
+
+ line_no = 0
+ output.each do |line|
+ md = line.match(/.+ (\d+) (\d+)/)
+ @fields[line_no].offset = md[1].to_i
+ @fields[line_no].size = md[2].to_i
+
+ line_no += 1
+ end
+
+ @found = true
+ end
+
+ def field(name, type=nil)
+ field = Field.new(name, type)
+ @fields << field
+ return field
+ end
+
+ def found?
+ @found
+ end
+
+ def dump_config(io)
+ io.puts "rbx.platform.#{@name}.sizeof = #{@size}"
+
+ @fields.each { |field| io.puts field.to_config(@name) }
+ end
+
+ def generate_layout
+ buf = ""
+
+ @fields.each_with_index do |field, i|
+ if buf.empty?
+ buf << "layout :#{field.name}, :#{field.type}, #{field.offset}"
+ else
+ buf << " :#{field.name}, :#{field.type}, #{field.offset}"
+ end
+
+ if i < @fields.length - 1
+ buf << ",\n"
+ end
+ end
+
+ buf
+ end
+
+ def get_field(name)
+ @fields.find { |f| name == f.name }
+ end
+
+ def include(i)
+ @includes << i
+ end
+
+ def name(n)
+ @struct_name = n
+ end
+
+ end
+
+ ##
+ # A field in a Struct.
+
+ class StructGenerator::Field
+
+ attr_reader :name
+ attr_reader :type
+ attr_reader :offset
+ attr_accessor :size
+
+ def initialize(name, type)
+ @name = name
+ @type = type
+ @offset = nil
+ @size = nil
+ end
+
+ def offset=(o)
+ @offset = o
+ end
+
+ def to_config(name)
+ buf = []
+ buf << "rbx.platform.#{name}.#{@name}.offset = #{@offset}"
+ buf << "rbx.platform.#{name}.#{@name}.size = #{@size}"
+ buf << "rbx.platform.#{name}.#{@name}.type = #{@type}" if @type
+ buf
+ end
+
+ end
+
+end
+
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/types_generator.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/types_generator.rb
new file mode 100644
index 0000000..ba2d8c5
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/tools/types_generator.rb
@@ -0,0 +1,137 @@
+require 'tempfile'
+
+module FFI
+
+ # @private
+ class TypesGenerator
+
+ ##
+ # Maps different C types to the C type representations we use
+
+ TYPE_MAP = {
+ "char" => :char,
+ "signed char" => :char,
+ "__signed char" => :char,
+ "unsigned char" => :uchar,
+
+ "short" => :short,
+ "signed short" => :short,
+ "signed short int" => :short,
+ "unsigned short" => :ushort,
+ "unsigned short int" => :ushort,
+
+ "int" => :int,
+ "signed int" => :int,
+ "unsigned int" => :uint,
+
+ "long" => :long,
+ "long int" => :long,
+ "signed long" => :long,
+ "signed long int" => :long,
+ "unsigned long" => :ulong,
+ "unsigned long int" => :ulong,
+ "long unsigned int" => :ulong,
+
+ "long long" => :long_long,
+ "long long int" => :long_long,
+ "signed long long" => :long_long,
+ "signed long long int" => :long_long,
+ "unsigned long long" => :ulong_long,
+ "unsigned long long int" => :ulong_long,
+
+ "char *" => :string,
+ "void *" => :pointer,
+ }
+
+ def self.generate(options = {})
+ typedefs = nil
+ Tempfile.open 'ffi_types_generator' do |io|
+ io.puts <<-C
+#include <stdint.h>
+#include <stddef.h>
+#include <sys/types.h>
+#if !(defined(WIN32))
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <sys/resource.h>
+#endif
+ C
+
+ io.close
+ cc = ENV['CC'] || 'gcc'
+ cmd = "#{cc} -E -x c #{options[:cppflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -c"
+ if options[:input]
+ typedefs = File.read(options[:input])
+ elsif options[:remote]
+ typedefs = `ssh #{options[:remote]} #{cmd} - < #{io.path}`
+ else
+ typedefs = `#{cmd} #{io.path}`
+ end
+ end
+
+ code = []
+
+ typedefs.each_line do |type|
+ # We only care about single line typedef
+ next unless type =~ /typedef/
+ # Ignore unions or structs
+ next if type =~ /union|struct/
+
+ # strip off the starting typedef and ending ;
+ type.gsub!(/^(.*typedef\s*)/, "")
+ type.gsub!(/\s*;\s*$/, "")
+
+ parts = type.split(/\s+/)
+ def_type = parts.join(" ")
+
+ # GCC does mapping with __attribute__ stuf, also see
+ # http://hal.cs.berkeley.edu/cil/cil016.html section 16.2.7. Problem
+ # with this is that the __attribute__ stuff can either occur before or
+ # after the new type that is defined...
+ if type =~ /__attribute__/
+ if parts.last =~ /__QI__|__HI__|__SI__|__DI__|__word__/
+
+ # In this case, the new type is BEFORE __attribute__ we need to
+ # find the final_type as the type before the part that starts with
+ # __attribute__
+ final_type = ""
+ parts.each do |p|
+ break if p =~ /__attribute__/
+ final_type = p
+ end
+ else
+ final_type = parts.pop
+ end
+
+ def_type = case type
+ when /__QI__/ then "char"
+ when /__HI__/ then "short"
+ when /__SI__/ then "int"
+ when /__DI__/ then "long long"
+ when /__word__/ then "long"
+ else "int"
+ end
+
+ def_type = "unsigned #{def_type}" if type =~ /unsigned/
+ else
+ final_type = parts.pop
+ def_type = parts.join(" ")
+ end
+
+ if type = TYPE_MAP[def_type]
+ code << "rbx.platform.typedef.#{final_type} = #{type}"
+ TYPE_MAP[final_type] = TYPE_MAP[def_type]
+ else
+ # Fallback to an ordinary pointer if we don't know the type
+ if def_type =~ /\*/
+ code << "rbx.platform.typedef.#{final_type} = pointer"
+ TYPE_MAP[final_type] = :pointer
+ end
+ end
+ end
+
+ code.sort.join("\n")
+ end
+ end
+end
+
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/types.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/types.rb
new file mode 100644
index 0000000..6f3ee4b
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/types.rb
@@ -0,0 +1,222 @@
+#
+# Copyright (C) 2008-2010 Wayne Meissner
+# Copyright (c) 2007, 2008 Evan Phoenix
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# see {file:README}
+module FFI
+
+ # Unless custom_typedefs already defined in the C-ext?
+ unless defined?(custom_typedefs)
+ # Truffleruby and JRuby don't support Ractor so far.
+ # So they don't need separation between builtin and custom types.
+ def self.custom_typedefs
+ TypeDefs
+ end
+ writable_typemap = true
+ end
+
+ class << self
+
+ private :custom_typedefs
+
+ # @param [Type, DataConverter, Symbol] old type definition used by {FFI.find_type}
+ # @param [Symbol] add new type definition's name to add
+ # @return [Type]
+ # Add a definition type to type definitions.
+ #
+ # The type definition is local per Ractor.
+ def typedef(old, add)
+ tm = custom_typedefs
+ tm[add] = find_type(old)
+ end
+
+ # (see FFI.typedef)
+ def add_typedef(old, add)
+ typedef old, add
+ end
+
+ private def __typedef(old, add)
+ TypeDefs[add] = find_type(old, TypeDefs)
+ end
+
+ # @param [Type, DataConverter, Symbol] name
+ # @param [Hash] type_map if nil, {FFI::TypeDefs} is used
+ # @return [Type]
+ # Find a type in +type_map+ ({FFI::TypeDefs}, by default) from
+ # a type objet, a type name (symbol). If +name+ is a {DataConverter},
+ # a new {Type::Mapped} is created.
+ def find_type(name, type_map = nil)
+ if name.is_a?(Type)
+ name
+
+ elsif type_map&.has_key?(name)
+ type_map[name]
+
+ elsif (tm=custom_typedefs).has_key?(name)
+ tm[name]
+
+ elsif TypeDefs.has_key?(name)
+ TypeDefs[name]
+
+ elsif name.is_a?(DataConverter)
+ # Add a typedef so next time the converter is used, it hits the cache
+ tm = (type_map || custom_typedefs)
+ tm[name] = Type::Mapped.new(name)
+ else
+ raise TypeError, "unable to resolve type '#{name}'"
+ end
+ end
+
+ # @param type +type+ is an instance of class accepted by {FFI.find_type}
+ # @return [Integer]
+ # Get +type+ size, in bytes.
+ def type_size(type)
+ find_type(type).size
+ end
+ end
+
+ # List of type definitions
+ TypeDefs.merge!({
+ # The C void type; only useful for function return types
+ :void => Type::VOID,
+
+ # C boolean type
+ :bool => Type::BOOL,
+
+ # C nul-terminated string
+ :string => Type::STRING,
+
+ # C signed char
+ :char => Type::CHAR,
+ # C unsigned char
+ :uchar => Type::UCHAR,
+
+ # C signed short
+ :short => Type::SHORT,
+ # C unsigned short
+ :ushort => Type::USHORT,
+
+ # C signed int
+ :int => Type::INT,
+ # C unsigned int
+ :uint => Type::UINT,
+
+ # C signed long
+ :long => Type::LONG,
+
+ # C unsigned long
+ :ulong => Type::ULONG,
+
+ # C signed long long integer
+ :long_long => Type::LONG_LONG,
+
+ # C unsigned long long integer
+ :ulong_long => Type::ULONG_LONG,
+
+ # C single precision float
+ :float => Type::FLOAT,
+
+ # C double precision float
+ :double => Type::DOUBLE,
+
+ # C long double
+ :long_double => Type::LONGDOUBLE,
+
+ # Native memory address
+ :pointer => Type::POINTER,
+
+ # 8 bit signed integer
+ :int8 => Type::INT8,
+ # 8 bit unsigned integer
+ :uint8 => Type::UINT8,
+
+ # 16 bit signed integer
+ :int16 => Type::INT16,
+ # 16 bit unsigned integer
+ :uint16 => Type::UINT16,
+
+ # 32 bit signed integer
+ :int32 => Type::INT32,
+ # 32 bit unsigned integer
+ :uint32 => Type::UINT32,
+
+ # 64 bit signed integer
+ :int64 => Type::INT64,
+ # 64 bit unsigned integer
+ :uint64 => Type::UINT64,
+
+ :buffer_in => Type::BUFFER_IN,
+ :buffer_out => Type::BUFFER_OUT,
+ :buffer_inout => Type::BUFFER_INOUT,
+
+ # Used in function prototypes to indicate the arguments are variadic
+ :varargs => Type::VARARGS,
+ })
+
+ # This will convert a pointer to a Ruby string (just like `:string`), but
+ # also allow to work with the pointer itself. This is useful when you want
+ # a Ruby string already containing a copy of the data, but also the pointer
+ # to the data for you to do something with it, like freeing it, in case the
+ # library handed the memory off to the caller (Ruby-FFI).
+ #
+ # It's {typedef}'d as +:strptr+.
+ class StrPtrConverter
+ extend DataConverter
+ native_type Type::POINTER
+
+ # @param [Pointer] val
+ # @param ctx not used
+ # @return [Array(String, Pointer)]
+ # Returns a [ String, Pointer ] tuple so the C memory for the string can be freed
+ def self.from_native(val, ctx)
+ [ val.null? ? nil : val.get_string(0), val ]
+ end
+ end
+
+ __typedef(StrPtrConverter, :strptr)
+
+ # Load all the platform dependent types
+ begin
+ File.open(File.join(Platform::CONF_DIR, 'types.conf'), "r") do |f|
+ prefix = "rbx.platform.typedef."
+ f.each_line { |line|
+ if line.index(prefix) == 0
+ new_type, orig_type = line.chomp.slice(prefix.length..-1).split(/\s*=\s*/)
+ __typedef(orig_type.to_sym, new_type.to_sym)
+ end
+ }
+ end
+ __typedef :pointer, :caddr_t
+ rescue Errno::ENOENT
+ end
+
+ FFI.make_shareable(TypeDefs) unless writable_typemap
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/union.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/union.rb
new file mode 100644
index 0000000..38414ab
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/union.rb
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2009 Andrea Fazzi <andrea.fazzi@alcacoop.it>
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+require 'ffi/struct'
+
+module FFI
+
+ class Union < FFI::Struct
+ def self.builder
+ b = StructLayoutBuilder.new
+ b.union = true
+ b
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/variadic.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/variadic.rb
new file mode 100644
index 0000000..ee33409
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/variadic.rb
@@ -0,0 +1,80 @@
+#
+# Copyright (C) 2008, 2009 Wayne Meissner
+# Copyright (C) 2009 Luc Heinrich
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+module FFI
+ class VariadicInvoker
+ def call(*args, &block)
+ param_types = Array.new(@fixed)
+ param_values = Array.new
+ @fixed.each_with_index do |t, i|
+ param_values << args[i]
+ end
+ i = @fixed.length
+ while i < args.length
+ param_types << FFI.find_type(args[i], @type_map)
+ param_values << args[i + 1]
+ i += 2
+ end
+ invoke(param_types, param_values, &block)
+ end
+
+ #
+ # Attach the invoker to module +mod+ as +mname+
+ #
+ def attach(mod, mname)
+ invoker = self
+ params = "*args"
+ call = "call"
+ mname = mname.to_sym
+ mod.module_eval <<-code, __FILE__, __LINE__
+ @ffi_functions = {} unless defined?(@ffi_functions)
+ @ffi_functions[#{mname.inspect}] = invoker
+
+ def self.#{mname}(#{params})
+ @ffi_functions[#{mname.inspect}].#{call}(#{params})
+ end
+
+ define_method(#{mname.inspect}, &method(#{mname.inspect}))
+ code
+ invoker
+ end
+
+ # Retrieve Array of parameter types
+ #
+ # This method returns an Array of FFI types accepted as function parameters.
+ #
+ # @return [Array<FFI::Type>]
+ def param_types
+ [*@fixed, Type::Builtin::VARARGS]
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/version.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/version.rb
new file mode 100644
index 0000000..a81fb4c
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/lib/ffi/version.rb
@@ -0,0 +1,3 @@
+module FFI
+ VERSION = '1.17.2'
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/rakelib/ffi_gem_helper.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/rakelib/ffi_gem_helper.rb
new file mode 100644
index 0000000..74be131
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/rakelib/ffi_gem_helper.rb
@@ -0,0 +1,65 @@
+require 'bundler'
+require 'bundler/gem_helper'
+
+class FfiGemHelper < Bundler::GemHelper
+ attr_accessor :cross_platforms
+
+ def install
+ super
+
+ task "release:guard_clean" => ["release:update_history"]
+
+ task "release:update_history" do
+ update_history
+ end
+
+ task "release:rubygem_push" => ["gem:native", "gem:java"]
+ end
+
+ def hfile
+ "CHANGELOG.md"
+ end
+
+ def headline
+ '([^\w]*)(\d+\.\d+\.\d+(?:\.\w+)?)([^\w]+)([2Y][0Y][0-9Y][0-9Y]-[0-1M][0-9M]-[0-3D][0-9D])([^\w]*|$)'
+ end
+
+ def reldate
+ Time.now.strftime("%Y-%m-%d")
+ end
+
+ def update_history
+ hin = File.read(hfile)
+ hout = hin.sub(/#{headline}/) do
+ raise "#{hfile} isn't up-to-date for version #{version}" unless $2==version.to_s
+ $1 + $2 + $3 + reldate + $5
+ end
+ if hout != hin
+ Bundler.ui.confirm "Updating #{hfile} for release."
+ File.write(hfile, hout)
+ Rake::FileUtilsExt.sh "git", "commit", hfile, "-m", "Update release date in #{hfile}"
+ end
+ end
+
+ def tag_version
+ Bundler.ui.confirm "Tag release with annotation:"
+ m = File.read(hfile).match(/(?<annotation>#{headline}.*?)#{headline}/m) || raise("Unable to find release notes in #{hfile}")
+ Bundler.ui.info(m[:annotation].gsub(/^/, " "))
+ IO.popen(["git", "tag", "--file=-", version_tag], "w") do |fd|
+ fd.write m[:annotation]
+ end
+ yield if block_given?
+ rescue
+ Bundler.ui.error "Untagging #{version_tag} due to error."
+ sh_with_code "git tag -d #{version_tag}"
+ raise
+ end
+
+ def rubygem_push(path)
+ cross_platforms.each do |ruby_platform|
+ super(path.gsub(/\.gem\z/, "-#{ruby_platform}.gem"))
+ end
+ super(path.gsub(/\.gem\z/, "-java.gem"))
+ super(path)
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getlogin.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getlogin.rb
new file mode 100644
index 0000000..6713021
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getlogin.rb
@@ -0,0 +1,8 @@
+require 'ffi'
+
+module Foo
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ attach_function :getlogin, [ ], :string
+end
+puts "getlogin=#{Foo.getlogin}"
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getpid.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getpid.rb
new file mode 100644
index 0000000..1720635
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/getpid.rb
@@ -0,0 +1,8 @@
+require 'ffi'
+
+module Foo
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ attach_function :getpid, [ ], :int
+end
+puts "My pid=#{Foo.getpid}"
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/gettimeofday.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/gettimeofday.rb
new file mode 100644
index 0000000..864bbb6
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/gettimeofday.rb
@@ -0,0 +1,18 @@
+require 'ffi'
+require 'rbconfig'
+
+class Timeval < FFI::Struct
+ layout tv_sec: :ulong, tv_usec: :ulong
+end
+module LibC
+ extend FFI::Library
+ if FFI::Platform.windows?
+ ffi_lib RbConfig::CONFIG["LIBRUBY_SO"]
+ else
+ ffi_lib FFI::Library::LIBC
+ end
+ attach_function :gettimeofday, [ :pointer, :pointer ], :int
+end
+t = Timeval.new
+LibC.gettimeofday(t.pointer, nil)
+puts "t.tv_sec=#{t[:tv_sec]} t.tv_usec=#{t[:tv_usec]}"
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello.rb
new file mode 100644
index 0000000..f2ccf37
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello.rb
@@ -0,0 +1,8 @@
+require 'ffi'
+
+module Foo
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ attach_function("cputs", "puts", [ :string ], :int)
+end
+Foo.cputs("Hello, World via libc puts using FFI on MRI ruby")
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello_ractor.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello_ractor.rb
new file mode 100644
index 0000000..904fe85
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/hello_ractor.rb
@@ -0,0 +1,11 @@
+require 'ffi'
+
+module Foo
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ attach_function("cputs", "puts", [ :string ], :int)
+ freeze
+end
+Ractor.new do
+ Foo.cputs("Hello, World via libc puts using FFI in a Ractor")
+end.take
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/inotify.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/inotify.rb
new file mode 100644
index 0000000..018d78c
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/inotify.rb
@@ -0,0 +1,60 @@
+require 'ffi'
+
+module Inotify
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ class Event < FFI::Struct
+ layout \
+ :wd, :int,
+ :mask, :uint,
+ :cookie, :uint,
+ :len, :uint
+ end
+ attach_function :init, :inotify_init, [ ], :int
+ attach_function :add_watch, :inotify_add_watch, [ :int, :string, :uint ], :int
+ attach_function :rm_watch, :inotify_rm_watch, [ :int, :uint ], :int
+ attach_function :read, [ :int, :buffer_out, :uint ], :int
+ IN_ACCESS=0x00000001
+ IN_MODIFY=0x00000002
+ IN_ATTRIB=0x00000004
+ IN_CLOSE_WRITE=0x00000008
+ IN_CLOSE_NOWRITE=0x00000010
+ IN_CLOSE=(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
+ IN_OPEN=0x00000020
+ IN_MOVED_FROM=0x00000040
+ IN_MOVED_TO=0x00000080
+ IN_MOVE= (IN_MOVED_FROM | IN_MOVED_TO)
+ IN_CREATE=0x00000100
+ IN_DELETE=0x00000200
+ IN_DELETE_SELF=0x00000400
+ IN_MOVE_SELF=0x00000800
+ # Events sent by the kernel.
+ IN_UNMOUNT=0x00002000
+ IN_Q_OVERFLOW=0x00004000
+ IN_IGNORED=0x00008000
+ IN_ONLYDIR=0x01000000
+ IN_DONT_FOLLOW=0x02000000
+ IN_MASK_ADD=0x20000000
+ IN_ISDIR=0x40000000
+ IN_ONESHOT=0x80000000
+ IN_ALL_EVENTS=(IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \
+ | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \
+ | IN_MOVED_TO | IN_CREATE | IN_DELETE \
+ | IN_DELETE_SELF | IN_MOVE_SELF)
+
+end
+if $0 == __FILE__
+ fd = Inotify.init
+ puts "fd=#{fd}"
+ wd = Inotify.add_watch(fd, "/tmp/", Inotify::IN_ALL_EVENTS)
+ fp = FFI::IO.for_fd(fd)
+ puts "wfp=#{fp}"
+ while true
+ buf = FFI::Buffer.alloc_out(Inotify::Event.size + 4096, 1, false)
+ ev = Inotify::Event.new buf
+ ready = IO.select([ fp ], nil, nil, nil)
+ n = Inotify.read(fd, buf, buf.total)
+ puts "Read #{n} bytes from inotify fd"
+ puts "event.wd=#{ev[:wd]} mask=#{ev[:mask]} len=#{ev[:len]} name=#{ev[:len] > 0 ? buf.get_string(16) : 'unknown'}"
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/pty.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/pty.rb
new file mode 100644
index 0000000..8b6b885
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/pty.rb
@@ -0,0 +1,75 @@
+require 'ffi'
+
+module PTY
+ private
+ module LibC
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ attach_function :forkpty, [ :buffer_out, :buffer_out, :buffer_in, :buffer_in ], :int
+ attach_function :openpty, [ :buffer_out, :buffer_out, :buffer_out, :buffer_in, :buffer_in ], :int
+ attach_function :login_tty, [ :int ], :int
+ attach_function :close, [ :int ], :int
+ attach_function :strerror, [ :int ], :string
+ attach_function :fork, [], :int
+ attach_function :execv, [ :string, :buffer_in ], :int
+ attach_function :execvp, [ :string, :buffer_in ], :int
+ attach_function :dup2, [ :int, :int ], :int
+ attach_function :dup, [ :int ], :int
+ end
+ Buffer = FFI::Buffer
+ def self.build_args(args)
+ cmd = args.shift
+ cmd_args = args.map do |arg|
+ MemoryPointer.from_string(arg)
+ end
+ exec_args = MemoryPointer.new(:pointer, 1 + cmd_args.length + 1)
+ exec_cmd = MemoryPointer.from_string(cmd)
+ exec_args[0].put_pointer(0, exec_cmd)
+ cmd_args.each_with_index do |arg, i|
+ exec_args[i + 1].put_pointer(0, arg)
+ end
+ [ cmd, exec_args ]
+ end
+ public
+ def self.getpty(*args)
+ mfdp = Buffer.new :int
+ name = Buffer.new 1024
+ #
+ # All the execv setup is done in the parent, since doing anything other than
+ # execv in the child after fork is really flakey
+ #
+ exec_cmd, exec_args = build_args(args)
+ pid = LibC.forkpty(mfdp, name, nil, nil)
+ raise "forkpty failed: #{LibC.strerror(FFI.errno)}" if pid < 0
+ if pid == 0
+ LibC.execvp(exec_cmd, exec_args)
+ exit 1
+ end
+ masterfd = mfdp.get_int(0)
+ rfp = FFI::IO.for_fd(masterfd, "r")
+ wfp = FFI::IO.for_fd(LibC.dup(masterfd), "w")
+ if block_given?
+ yield rfp, wfp, pid
+ rfp.close unless rfp.closed?
+ wfp.close unless wfp.closed?
+ else
+ [ rfp, wfp, pid ]
+ end
+ end
+ def self.spawn(*args, &block)
+ self.getpty("/bin/sh", "-c", args[0], &block)
+ end
+end
+module LibC
+ extend FFI::Library
+ attach_function :close, [ :int ], :int
+ attach_function :write, [ :int, :buffer_in, :ulong ], :long
+ attach_function :read, [ :int, :buffer_out, :ulong ], :long
+end
+PTY.getpty("/bin/ls", "-alR", "/") { |rfd, wfd, pid|
+#PTY.spawn("ls -laR /") { |rfd, wfd, pid|
+ puts "child pid=#{pid}"
+ while !rfd.eof? && (buf = rfd.gets)
+ puts "child: '#{buf.strip}'"
+ end
+}
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort.rb
new file mode 100644
index 0000000..58622c1
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort.rb
@@ -0,0 +1,20 @@
+require 'ffi'
+
+module LibC
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ callback :qsort_cmp, [ :pointer, :pointer ], :int
+ attach_function :qsort, [ :pointer, :ulong, :ulong, :qsort_cmp ], :int
+end
+
+p = FFI::MemoryPointer.new(:int, 2)
+p.put_array_of_int32(0, [ 2, 1 ])
+puts "ptr=#{p.inspect}"
+puts "Before qsort #{p.get_array_of_int32(0, 2).join(', ')}"
+LibC.qsort(p, 2, 4) do |p1, p2|
+ i1 = p1.get_int32(0)
+ i2 = p2.get_int32(0)
+ puts "In block: comparing #{i1} and #{i2}"
+ i1 < i2 ? -1 : i1 > i2 ? 1 : 0
+end
+puts "After qsort #{p.get_array_of_int32(0, 2).join(', ')}"
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort_ractor.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort_ractor.rb
new file mode 100644
index 0000000..db085de
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/samples/qsort_ractor.rb
@@ -0,0 +1,28 @@
+require 'ffi'
+
+module LibC
+ extend FFI::Library
+ ffi_lib FFI::Library::LIBC
+ callback :qsort_cmp, [ :pointer, :pointer ], :int
+ attach_function :qsort, [ :pointer, :ulong, :ulong, :qsort_cmp ], :int
+
+ freeze # Freeze the module variables, so that it can be shared across ractors.
+end
+
+p = FFI::MemoryPointer.new(:int, 3)
+p.put_array_of_int32(0, [ 2, 3, 1 ]) # Write some unsorted data into the memory
+# Ractor.make_shareable(p) # freeze the pointer to be shared between ractors instead of copied
+puts "main -ptr=#{p.inspect}"
+res = Ractor.new(p) do |p|
+ puts "ractor-ptr=#{p.inspect}"
+ puts "Before qsort #{p.get_array_of_int32(0, 3).join(', ')}"
+ LibC.qsort(p, 3, 4) do |p1, p2|
+ i1 = p1.get_int32(0)
+ i2 = p2.get_int32(0)
+ puts "In block: comparing #{i1} and #{i2}"
+ i1 < i2 ? -1 : i1 > i2 ? 1 : 0
+ end
+ puts "After qsort #{p.get_array_of_int32(0, 3).join(', ')}"
+end.take
+
+puts "After ractor termination #{p.get_array_of_int32(0, 3).join(', ')}"
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi.rbs
new file mode 100644
index 0000000..c40ad6f
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi.rbs
@@ -0,0 +1,26 @@
+module FFI
+ type ffi_type = Type | Symbol
+ type ffi_auto_type = ffi_type | DataConverter[untyped, untyped, untyped]
+ type type_map = Hash[Symbol | DataConverter[untyped, untyped, untyped], Type]
+
+ class CallbackInfo = FunctionType
+ class FunctionInfo = FunctionType
+ class NativeLibrary = DynamicLibrary
+
+ VERSION: String
+ TypeDefs: type_map
+
+ type current_process = Object
+ CURRENT_PROCESS: current_process
+ USE_THIS_PROCESS_AS_LIBRARY: current_process
+
+ private def self.custom_typedefs: () -> type_map
+ def self.errno: () -> Integer
+ def self.errno=: (Integer) -> nil
+ def self.find_type: (ffi_auto_type name, ?type_map? type_map) -> Type
+ def self.make_shareable: [T] (T obj) -> T
+ def self.map_library_name: (_ToS lib) -> String
+ def self.type_size: (ffi_auto_type type) -> Integer
+ def self.typedef: (ffi_auto_type old, Symbol add) -> Type
+ alias self.add_typedef self.typedef
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/abstract_memory.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/abstract_memory.rbs
new file mode 100644
index 0000000..9678ad0
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/abstract_memory.rbs
@@ -0,0 +1,165 @@
+module FFI
+ class AbstractMemory
+ interface _Size
+ def size: () -> Integer
+ end
+ include _Size
+ type type_size = Integer | _Size | Symbol
+
+ type order_out = :big | :little
+ type order_in = order_out | :network
+
+ def []: (Integer idx) -> instance
+ def clear: () -> self
+ def freeze: ...
+ def get: (ffi_type type, Integer offset) -> top
+ def put: (ffi_type type, Integer offset, top value) -> nil
+ def size_limit?: () -> bool
+ def type_size: () -> Integer
+ alias total size
+
+ def get_int8: (Integer offset) -> Integer
+ def get_int16: (Integer offset) -> Integer
+ def get_int32: (Integer offset) -> Integer
+ def get_int64: (Integer offset) -> Integer
+ def get_uint8: (Integer offset) -> Integer
+ def get_uint16: (Integer offset) -> Integer
+ def get_uint32: (Integer offset) -> Integer
+ def get_uint64: (Integer offset) -> Integer
+ def get_char: (Integer offset) -> Integer
+ def get_short: (Integer offset) -> Integer
+ def get_int: (Integer offset) -> Integer
+ def get_long_long: (Integer offset) -> Integer
+ def get_float32: (Integer offset) -> Float
+ def get_float64: (Integer offset) -> Float
+ def get_pointer: (Integer offset) -> Pointer
+ def get_bytes: (Integer offset, Integer length) -> String
+ def get_string: (Integer offset, ?Integer? length) -> String
+ alias get_float get_float32
+ alias get_double get_float64
+
+ def put_int8: (Integer offset, int value) -> self
+ def put_int16: (Integer offset, int value) -> self
+ def put_int32: (Integer offset, int value) -> self
+ def put_int64: (Integer offset, int value) -> self
+ def put_uint8: (Integer offset, int value) -> self
+ def put_uint16: (Integer offset, int value) -> self
+ def put_uint32: (Integer offset, int value) -> self
+ def put_uint64: (Integer offset, int value) -> self
+ def put_char: (Integer offset, int value) -> self
+ def put_short: (Integer offset, int value) -> self
+ def put_int: (Integer offset, int value) -> self
+ def put_long_long: (Integer offset, int value) -> self
+ def put_float32: (Integer offset, Numeric value) -> self
+ def put_float64: (Integer offset, Numeric value) -> self
+ def put_pointer: (Integer offset, pointer value) -> self
+ def put_bytes: (Integer offset, String str, ?Integer index, ?Integer? length) -> self
+ def put_string: (Integer offset, String value) -> self
+ alias put_float put_float32
+ alias put_double put_float64
+
+ def read_int8: () -> Integer
+ def read_int16: () -> Integer
+ def read_int32: () -> Integer
+ def read_int64: () -> Integer
+ def read_uint8: () -> Integer
+ def read_uint16: () -> Integer
+ def read_uint32: () -> Integer
+ def read_uint64: () -> Integer
+ def read_char: () -> Integer
+ def read_short: () -> Integer
+ def read_int: () -> Integer
+ def read_long_long: () -> Integer
+ def read_float: () -> Float
+ def read_double: () -> Float
+ def read_pointer: () -> Pointer
+ def read_bytes: (Integer length) -> String
+
+ def write_int8: (int value) -> self
+ def write_int16: (int value) -> self
+ def write_int32: (int value) -> self
+ def write_int64: (int value) -> self
+ def write_uint8: (int value) -> self
+ def write_uint16: (int value) -> self
+ def write_uint32: (int value) -> self
+ def write_uint64: (int value) -> self
+ def write_char: (int value) -> self
+ def write_short: (int value) -> self
+ def write_int: (int value) -> self
+ def write_long_long: (int value) -> self
+ def write_float: (Numeric value) -> self
+ def write_double: (Numeric value) -> self
+ def write_pointer: (pointer value) -> self
+ def write_bytes: (String str, ?Integer index, ?Integer? length) -> self
+
+ def get_array_of_int8: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_int16: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_int32: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_int64: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_uint8: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_uint16: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_uint32: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_uint64: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_char: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_short: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_int: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_long_long: (Integer offset, Integer length) -> Array[Integer]
+ def get_array_of_float32: (Integer offset, Integer length) -> Array[Float]
+ def get_array_of_float64: (Integer offset, Integer length) -> Array[Float]
+ def get_array_of_pointer: (Integer offset, Integer length) -> Array[Pointer]
+ def get_array_of_string: (Integer offset, ?Integer? count) -> Array[String?]
+ alias get_array_of_float get_array_of_float32
+ alias get_array_of_double get_array_of_float64
+
+ def put_array_of_int8: (Integer offset, Array[int] ary) -> self
+ def put_array_of_int16: (Integer offset, Array[int] ary) -> self
+ def put_array_of_int32: (Integer offset, Array[int] ary) -> self
+ def put_array_of_int64: (Integer offset, Array[int] ary) -> self
+ def put_array_of_uint8: (Integer offset, Array[int] ary) -> self
+ def put_array_of_uint16: (Integer offset, Array[int] ary) -> self
+ def put_array_of_uint32: (Integer offset, Array[int] ary) -> self
+ def put_array_of_uint64: (Integer offset, Array[int] ary) -> self
+ def put_array_of_char: (Integer offset, Array[int] ary) -> self
+ def put_array_of_short: (Integer offset, Array[int] ary) -> self
+ def put_array_of_int: (Integer offset, Array[int] ary) -> self
+ def put_array_of_long_long: (Integer offset, Array[int] ary) -> self
+ def put_array_of_float32: (Integer offset, Array[Numeric] ary) -> self
+ def put_array_of_float64: (Integer offset, Array[Numeric] ary) -> self
+ def put_array_of_pointer: (Integer offset, Array[pointer] ary) -> self
+ alias put_array_of_float put_array_of_float32
+ alias put_array_of_double put_array_of_float64
+
+ def read_array_of_int8: (Integer length) -> Array[Integer]
+ def read_array_of_int16: (Integer length) -> Array[Integer]
+ def read_array_of_int32: (Integer length) -> Array[Integer]
+ def read_array_of_int64: (Integer length) -> Array[Integer]
+ def read_array_of_uint8: (Integer length) -> Array[Integer]
+ def read_array_of_uint16: (Integer length) -> Array[Integer]
+ def read_array_of_uint32: (Integer length) -> Array[Integer]
+ def read_array_of_uint64: (Integer length) -> Array[Integer]
+ def read_array_of_char: (Integer length) -> Array[Integer]
+ def read_array_of_short: (Integer length) -> Array[Integer]
+ def read_array_of_int: (Integer length) -> Array[Integer]
+ def read_array_of_long_long: (Integer length) -> Array[Integer]
+ def read_array_of_float: (Integer length) -> Array[Float]
+ def read_array_of_double: (Integer length) -> Array[Float]
+ def read_array_of_pointer: (Integer length) -> Array[Pointer]
+ def read_array_of_string: (?Integer? count) -> Array[String?]
+
+ def write_array_of_int8: (Array[int] ary) -> self
+ def write_array_of_int16: (Array[int] ary) -> self
+ def write_array_of_int32: (Array[int] ary) -> self
+ def write_array_of_int64: (Array[int] ary) -> self
+ def write_array_of_uint8: (Array[int] ary) -> self
+ def write_array_of_uint16: (Array[int] ary) -> self
+ def write_array_of_uint32: (Array[int] ary) -> self
+ def write_array_of_uint64: (Array[int] ary) -> self
+ def write_array_of_char: (Array[int] ary) -> self
+ def write_array_of_short: (Array[int] ary) -> self
+ def write_array_of_int: (Array[int] ary) -> self
+ def write_array_of_long_long: (Array[int] ary) -> self
+ def write_array_of_float: (Array[Numeric] ary) -> self
+ def write_array_of_double: (Array[Numeric] ary) -> self
+ def write_array_of_pointer: (Array[pointer] ary) -> self
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/auto_pointer.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/auto_pointer.rbs
new file mode 100644
index 0000000..cd289c6
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/auto_pointer.rbs
@@ -0,0 +1,26 @@
+module FFI
+ class AutoPointer < Pointer
+ class Releaser
+ attr_accessor autorelease: boolish
+ interface _Proc[P < Pointer]
+ def call: (P) -> void
+ end
+ def initialize: [P < Pointer] (P ptr, _Proc[P] proc) -> void
+
+ def call: (*untyped) -> void
+ def free: () -> nil
+ def release: (Pointer ptr) -> void
+ end
+
+ def initialize: (Pointer pointer, Method | ^(self) -> void | Releaser::_Proc[self] callable) -> self
+ | (Pointer pointer) -> self # where class < `def self.release: (instance pointer) -> void`
+
+ extend DataConverter[Pointer, instance, nil]
+ def self.from_native: ...
+ def self.native_type: () -> Type::Builtin
+
+ def autorelease?: ...
+ def autorelease=: ...
+ def free: () -> nil
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/buffer.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/buffer.rbs
new file mode 100644
index 0000000..68cde6b
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/buffer.rbs
@@ -0,0 +1,18 @@
+module FFI
+ class Buffer < AbstractMemory
+ def initialize: (AbstractMemory::type_size, ?Integer count, boolish clear) -> self
+ alias self.alloc_inout self.new
+ alias self.new_inout self.alloc_inout
+ alias self.alloc_in self.alloc_inout
+ alias self.new_in self.alloc_in
+ alias self.alloc_out self.alloc_inout
+ alias self.new_out self.alloc_out
+
+ def +: (Integer) -> Buffer
+ def inspect: ...
+ def order: () -> AbstractMemory::order_out
+ | (AbstractMemory::order_in order) -> Buffer
+ | (untyped order) -> (self | Buffer)
+ def slice: (Integer offset, Integer length) -> Buffer
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/data_converter.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/data_converter.rbs
new file mode 100644
index 0000000..a0e2e39
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/data_converter.rbs
@@ -0,0 +1,10 @@
+module FFI
+ interface _DataConverter[N, R, in C]
+ def from_native: (N value, C ctx) -> R
+ def native_type: (?ffi_auto_type? type) -> Type
+ def to_native: (R value, C ctx) -> N
+ end
+ module DataConverter[N, R, in C]
+ include _DataConverter[N, R, C]
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/dynamic_library.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/dynamic_library.rbs
new file mode 100644
index 0000000..48031bf
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/dynamic_library.rbs
@@ -0,0 +1,9 @@
+module FFI
+ class DynamicLibrary
+ # TODO
+
+ class Symbol < Pointer
+ # TODO
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/enum.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/enum.rbs
new file mode 100644
index 0000000..3cae0b2
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/enum.rbs
@@ -0,0 +1,38 @@
+module FFI
+ class Enums
+ def initialize: () -> void
+
+ def <<: (Enum enum) -> void
+ def __map_symbol: (Symbol symbol) -> Integer?
+ def find: (Symbol query) -> Enum
+ end
+
+ class Enum
+ include DataConverter[Integer, Symbol | Integer, untyped]
+
+ attr_reader native_type: Type
+ attr_reader tag: Symbol?
+ def initialize: (Enumerable[Symbol | Integer], ?Symbol? tag, *untyped) -> void
+ | (Type native_type, Enumerable[Symbol | Integer], ?Symbol? tag, *untyped) -> void
+
+ def []: (Symbol query) -> Integer?
+ | (Integer query) -> Symbol?
+ def symbol_map: () -> Hash[Symbol, Integer]
+ alias to_h symbol_map
+ alias to_hash symbol_map
+ def symbols: () -> Array[Symbol]
+ def to_native: (Symbol | int value, untyped ctx) -> Integer
+ end
+
+ class Bitmask < Enum
+ def initialize: ...
+
+ def []: (*Symbol query) -> Integer
+ | (Array[Symbol] query) -> Integer
+ | (*Integer query) -> Array[Symbol]
+ | (Array[Integer] query) -> Array[Symbol]
+ def from_native: (Integer, untyped ctx) -> Array[Symbol | Integer]
+ def to_native: (Array[Symbol | int] value, untyped ctx) -> Integer
+ | ...
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/function.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/function.rbs
new file mode 100644
index 0000000..94a23c2
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/function.rbs
@@ -0,0 +1,39 @@
+module FFI
+ interface _Function
+ # TODO: leads to a endless recursion when used with -rrbs/test/setup
+ # def attach: (Module mod, String name) -> self
+ def call: (*untyped args) -> untyped
+ def param_types: () -> Array[Type]
+ def return_type: () -> Type
+ end
+
+ class Function < Pointer
+ include _Function
+ # ?blocking: boolish?, ?convention: Library::convention?, ?enums: Enums?
+ def initialize:
+ (
+ ffi_type return_type, Array[ffi_type] param_types,
+ ?Hash[Symbol, untyped] options
+ ) { (*untyped) -> untyped } -> self
+ | (
+ ffi_type return_type, Array[ffi_type] param_types, Proc | Pointer proc,
+ ?Hash[Symbol, untyped] options
+ ) -> self
+
+ def autorelease?: ...
+ alias autorelease autorelease?
+ def autorelease=: ...
+ def free: () -> self
+ end
+
+ class VariadicInvoker
+ include _Function
+ def initialize:
+ (
+ Pointer function, Array[ffi_type] parameter_types, ffi_type return_type,
+ Hash[Symbol, untyped] options #TODO
+ ) -> void
+
+ def invoke: (Array[Type] parameter_types, Array[untyped] parameter_values) -> untyped
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/library.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/library.rbs
new file mode 100644
index 0000000..e823b6d
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/library.rbs
@@ -0,0 +1,42 @@
+module FFI
+ module Library
+ type convention = :default | :stdcall
+ type ffi_lib_flag = :global | :local | :lazy | :now
+ type ffi_lib_type = ffi_auto_type | singleton(Struct)
+
+ CURRENT_PROCESS: current_process
+ LIBC: String
+ FlagsMap: Hash[ffi_lib_flag, Integer]
+
+ def self.extended: ...
+
+ def attach_function: ( _ToS func, Array[ffi_lib_type] args, ffi_lib_type? returns, ?blocking: boolish, ?convention: convention, ?enums: Enums, ?type_map: type_map) -> (Function | VariadicInvoker)
+ | (_ToS name, _ToS func, Array[ffi_lib_type] args, ?ffi_lib_type? returns, ?blocking: boolish, ?convention: convention, ?enums: Enums, ?type_map: type_map) -> (Function | VariadicInvoker)
+ def attach_variable: (?_ToS mname, _ToS cname, ffi_lib_type type) -> DynamicLibrary::Symbol
+ def attached_functions: () -> Hash[Symbol, Function | VariadicInvoker]
+ def attached_variables: () -> Hash[Symbol, Type | singleton(Struct)]
+
+ def bitmask: (?Type native_type, Symbol name, Array[Symbol | Integer] values) -> Bitmask
+ | (?Type native_type, *Symbol | Integer args) -> Bitmask
+ | (?Type native_type, Array[Symbol | Integer] values) -> Bitmask
+ def enum: (?Type native_type, Symbol name, Array[Symbol | Integer] values) -> Enum
+ | (?Type native_type, *Symbol | Integer args) -> Enum
+ | (?Type native_type, Array[Symbol | Integer] values) -> Enum
+ def enum_type: (Symbol name) -> Enum?
+ def enum_for: (Symbol name) -> Integer?
+
+ def callback: (?Symbol name, Array[ffi_lib_type] params, ffi_lib_type ret) -> CallbackInfo
+ def ffi_convention: (?convention? convention) -> convention
+ def ffi_lib: (*_ToS names) -> Array[DynamicLibrary]
+ def ffi_lib_flags: (*ffi_lib_flag flags) -> Integer
+ def ffi_libraries: () -> Array[DynamicLibrary]
+ def find_type: (ffi_lib_type t) -> Type
+ def freeze: () -> void
+ def function_names: (_ToS name, Array[Type | singleton(Struct)] arg_types) -> Array[String]
+ def typedef: [T < Type, N, R, C] (T old, Symbol | DataConverter[N, R, C] add, ?untyped) -> T
+ | (Symbol old, Symbol add, ?untyped) -> (Type | Enum)
+ | [X < DataConverter[N, R, C], N, R, C] (X old, Symbol add, ?untyped) -> Type::Mapped[X, N, R, C]
+ | (:enum old, Array[Symbol | Integer] add, ?untyped) -> Enum
+ | (:enum old, Symbol | Type add, Array[Symbol | Integer] info) -> Enum
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/native_type.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/native_type.rbs
new file mode 100644
index 0000000..c9617a0
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/native_type.rbs
@@ -0,0 +1,86 @@
+module FFI
+ class Type
+ INT8: Builtin
+ SCHAR: Builtin
+ CHAR: Builtin
+ UINT8: Builtin
+ UCHAR: Builtin
+ INT16: Builtin
+ SHORT: Builtin
+ SSHORT: Builtin
+ UINT16: Builtin
+ USHORT: Builtin
+ INT32: Builtin
+ INT: Builtin
+ SINT: Builtin
+ UINT32: Builtin
+ UINT: Builtin
+ INT64: Builtin
+ LONG_LONG: Builtin
+ SLONG_LONG: Builtin
+ UINT64: Builtin
+ ULONG_LONG: Builtin
+ LONG: Builtin
+ SLONG: Builtin
+ ULONG: Builtin
+ FLOAT32: Builtin
+ FLOAT: Builtin
+ FLOAT64: Builtin
+ DOUBLE: Builtin
+ LONGDOUBLE: Builtin
+ POINTER: Builtin
+ BOOL: Builtin
+ STRING: Builtin
+ BUFFER_IN: Builtin
+ BUFFER_OUT: Builtin
+ BUFFER_INOUT: Builtin
+ VARARGS: Builtin
+ VOID: Builtin
+ end
+
+ module NativeType
+ INT8: Type::Builtin
+ UINT8: Type::Builtin
+ INT16: Type::Builtin
+ UINT16: Type::Builtin
+ INT32: Type::Builtin
+ UINT32: Type::Builtin
+ INT64: Type::Builtin
+ UINT64: Type::Builtin
+ LONG: Type::Builtin
+ ULONG: Type::Builtin
+ FLOAT32: Type::Builtin
+ FLOAT64: Type::Builtin
+ LONGDOUBLE: Type::Builtin
+ POINTER: Type::Builtin
+ BOOL: Type::Builtin
+ STRING: Type::Builtin
+ BUFFER_IN: Type::Builtin
+ BUFFER_OUT: Type::Builtin
+ BUFFER_INOUT: Type::Builtin
+ VARARGS: Type::Builtin
+ VOID: Type::Builtin
+ end
+
+ TYPE_INT8: Type::Builtin
+ TYPE_UINT8: Type::Builtin
+ TYPE_INT16: Type::Builtin
+ TYPE_UINT16: Type::Builtin
+ TYPE_INT32: Type::Builtin
+ TYPE_UINT32: Type::Builtin
+ TYPE_INT64: Type::Builtin
+ TYPE_UINT64: Type::Builtin
+ TYPE_LONG: Type::Builtin
+ TYPE_ULONG: Type::Builtin
+ TYPE_FLOAT32: Type::Builtin
+ TYPE_FLOAT64: Type::Builtin
+ TYPE_LONGDOUBLE: Type::Builtin
+ TYPE_POINTER: Type::Builtin
+ TYPE_BOOL: Type::Builtin
+ TYPE_STRING: Type::Builtin
+ TYPE_BUFFER_IN: Type::Builtin
+ TYPE_BUFFER_OUT: Type::Builtin
+ TYPE_BUFFER_INOUT: Type::Builtin
+ TYPE_VARARGS: Type::Builtin
+ TYPE_VOID: Type::Builtin
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/pointer.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/pointer.rbs
new file mode 100644
index 0000000..fd4e9b8
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/pointer.rbs
@@ -0,0 +1,42 @@
+module FFI
+ type pointer = Pointer::_ToPtr? | Integer
+ class Pointer < AbstractMemory
+ interface _ToPtr
+ def to_ptr: () -> Pointer
+ end
+ include _ToPtr
+
+ SIZE: Integer
+ NULL: Pointer
+ def self.size: () -> Integer
+
+ def initialize: (?AbstractMemory::type_size type, (Pointer | Integer) address) -> void
+ def +: (Integer offset) -> Pointer
+ def ==: (Pointer? other) -> bool
+ def address: () -> Integer
+ alias to_i address
+ def autorelease?: () -> bool
+ def autorelease=: (boolish autorelease) -> boolish
+ def free: () -> self
+ def inspect: ...
+ def null?: () -> bool
+ def order: () -> AbstractMemory::order_out
+ | (AbstractMemory::order_in) -> Pointer
+ def read: (ffi_type type) -> top
+ def read_array_of_type: (ffi_auto_type type, Symbol reader, Integer length) -> Array[top]
+ def read_string: (?Integer? len) -> String
+ def read_string_length: (Integer len) -> String
+ def read_string_to_null: () -> String
+ def slice: (Integer offset, Integer length) -> Pointer
+ def type_size: () -> Integer
+ def write: (ffi_type type, top value) -> nil
+ def write_array_of_type: (ffi_auto_type type, Symbol writer, Array[top]) -> self
+ def write_string: (String str, ?Integer? len) -> self
+ def write_string_length: (String str, Integer len) -> self
+ end
+
+ class MemoryPointer < Pointer
+ def initialize: (AbstractMemory::type_size size, ?Integer count, ?boolish clear) -> self
+ def self.from_string: (String s) -> instance
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct.rbs
new file mode 100644
index 0000000..5b349bf
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct.rbs
@@ -0,0 +1,76 @@
+module FFI
+ class Struct[out P < AbstractMemory, unchecked out E]
+ type layout = Library::ffi_lib_type | singleton(StructLayout::Field) | [layout, Integer]
+
+ type ptr = Type::Mapped[
+ StructByReference[Struct[AbstractMemory, untyped], AbstractMemory],
+ AbstractMemory, instance, untyped
+ ]
+ def self.ptr: (?untyped flags) -> ptr # https://github.com/ffi/ffi/issues/1073
+ alias self.by_ref self.ptr
+ def self.in: () -> ptr
+ def self.out: () -> ptr
+ def self.val: () -> StructByValue[singleton(Struct)]
+ alias self.by_value self.val
+
+ alias self.alloc_inout self.new
+ alias self.alloc_in self.new
+ alias self.alloc_out self.new
+ alias self.new_inout self.new
+ alias self.new_in self.new
+ alias self.new_out self.new
+
+ def self.auto_ptr: () -> Type::Mapped[
+ ManagedStructConverter[ManagedStruct[AutoPointer, untyped], AutoPointer],
+ Pointer, instance, untyped
+ ]
+ def self.layout: (*layout | Integer) -> StructLayout
+ | (Hash[Symbol, layout]) -> StructLayout
+ def self.size=: (Integer size) -> Integer
+
+ def self?.alignment: () -> Integer
+ def self?.members: () -> Array[Symbol]
+ def self?.offset_of: (Symbol name) -> Integer
+ def self?.offsets: () -> Array[[Symbol, Integer]]
+ def self?.size: -> Integer
+
+ def initialize: (?P pointer, *layout args) -> void
+ def []: (Symbol field_name) -> E
+ def []=: (Symbol field_name, E value) -> E
+ alias align alignment
+ def clear: () -> self
+ def layout: () -> StructLayout
+ def null?: () -> bool
+ def order: (AbstractMemory::order_in order) -> Struct[P, E]
+ | () -> AbstractMemory::order_out
+ def pointer: () -> P
+ alias to_ptr pointer
+ def values: () -> Array[E]
+
+ class InlineArray[out P < AbstractMemory, unchecked out E]
+ include Enumerable[E]
+ include AbstractMemory::_Size
+
+ def initialize: (P memory, StructLayout::Field field) -> self
+ def []: (Integer index) -> E
+ def []=: (Integer index, E value) -> E
+ def each: () { (E) -> void } -> self
+ def to_a: () -> Array[E]
+ def to_ptr: () -> P
+ end
+
+ class ManagedStructConverter[S < ManagedStruct[P, untyped], P < AutoPointer] < StructByReference[S, P]
+ def initialize: ...
+ def from_native: (Pointer ptr, untyped ctx) -> S
+ end
+ end
+
+ class ManagedStruct[out P < AutoPointer, unchecked out E] < Struct[P, E]
+ def self.release: (AbstractMemory ptr) -> void
+ def initialize: (Pointer pointer) -> self
+ end
+
+ class Union[out P < AbstractMemory, unchecked out E] < Struct[P, E]
+ def self.builder: () -> StructLayoutBuilder
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_reference.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_reference.rbs
new file mode 100644
index 0000000..475b483
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_reference.rbs
@@ -0,0 +1,11 @@
+module FFI
+ class StructByReference[S < Struct[P, untyped], P < AbstractMemory]
+ include DataConverter[P, S, untyped]
+ attr_reader struct_class: Struct[P, untyped]
+
+ def initialize: (S struct_class) -> void
+ def from_native: (P value, untyped ctx) -> S
+ def native_type: () -> Type::Builtin
+ def to_native: (S? value, untyped ctx) -> P
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_value.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_value.rbs
new file mode 100644
index 0000000..902bcc6
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_by_value.rbs
@@ -0,0 +1,7 @@
+module FFI
+ class StructByValue[C < singleton(Struct)] < Type
+ def initialize: (C) -> self
+ def layout: () -> StructLayout
+ def struct_class: () -> C
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout.rbs
new file mode 100644
index 0000000..12b05ae
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout.rbs
@@ -0,0 +1,9 @@
+module FFI
+ class StructLayout
+ #TODO
+
+ class Field
+ #TODO
+ end
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout_builder.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout_builder.rbs
new file mode 100644
index 0000000..291a669
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/struct_layout_builder.rbs
@@ -0,0 +1,5 @@
+module FFI
+ class StructLayoutBuilder
+ #TODO
+ end
+end
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/type.rbs b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/type.rbs
new file mode 100644
index 0000000..66186d1
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.2-arm64-darwin/sig/ffi/type.rbs
@@ -0,0 +1,39 @@
+module FFI
+ class Type
+ class Array = ArrayType
+ class Function = FunctionType
+ class Struct = StructByValue
+
+ include AbstractMemory::_Size
+ def initialize: (Integer | Type value) -> self
+ def alignment: () -> Integer
+ def inspect: ...
+
+ class Builtin < Type
+ def inspect: ...
+ end
+
+ class Mapped[X < _DataConverter[N, R, C], N, R, C]
+ include _DataConverter[N, R, C]
+
+ def initialize: (X converter) -> self
+ def converter: () -> X
+ end
+ end
+
+ class ArrayType
+ def initialize: (Type component_type, Integer length) -> self
+ def element_type: -> Type
+ def length: -> Integer
+ end
+
+ class FunctionType < Type
+ def initialize:
+ (
+ ffi_type return_type, Array[ffi_type] param_types,
+ ?blocking: boolish, ?convention: Library::convention, ?enums: Enums
+ ) -> self
+ def param_types: () -> Array[Type]
+ def return_type: () -> Type
+ end
+end